Отключение автоматического отступа при вставке текста в vim
Я стараюсь узнать Vim.
Когда я вставляю код в свой документ из буфера обмена, я получаю дополнительные пробелы в начале каждой новой строки:
line
line
line
Я знаю, что вы можете отключить автоматический отступ, но я не могу заставить его работать, потому что у меня есть некоторые другие конфликтующие настройки или что-то (что выглядит довольно очевидно в моем .vimrc, но, похоже, не имеет значения, когда я их вынимаю).
Как отключить авто отступы, когда я вставляю код, но все еще имею auto indent, когда я пишу код? Вот мой файл .vimrc
:
set expandtab
set tabstop=2
set shiftwidth=2
set autoindent
set smartindent
set bg=dark
set nowrap
Ответы
Ответ 1
Обновление: лучше ответ здесь: fooobar.com/questions/11596/...
Чтобы отключить автоиндентирование при вставке кода, существует специальный режим "вставки".
Тип
:set paste
Затем вставьте свой код. Обратите внимание, что текст во всплывающей подсказке теперь говорит -- INSERT (paste) --
.
После того, как вы вставили свой код, отключите режим вставки, чтобы автоматический ввод отступа при вводе снова работал правильно.
:set nopaste
Тем не менее, я всегда находил это громоздким. Вот почему я отображаю <F3>
, что он может переключаться между режимами вставки и nopaste при редактировании текста! Я добавляю это в .vimrc
set pastetoggle=<F3>
Ответ 2
Чтобы избежать нежелательных эффектов при вставке, необходимо установить параметр:
set paste
Полезной командой для вашего .vimrc является set pastetoggle=<F10>
или некоторая другая кнопка, чтобы легко переключаться между пастой и nopaste.
Ответ 3
Я обычно использую :r! cat
, а затем вставляю ( shift + insert )
содержимое и CTRL+D
.
Не нужно включать и отключать прямое использование.
Ответ 4
Если вы работаете локально, вы можете вставить из системного буфера обмена последовательность клавиш:
"+p
Это правильная команда vim, поэтому вам не нужно беспокоиться о входе в режим вставки или сначала отключении автоиндиката.
Конечно, если вы работаете удаленно (например, консоль через SSH), то это не сработает, и вы должны пойти в :set noai
, вставить режим, вставить в консоль, оставить путь insertmode, :set ai
, как описано в другом месте.
Ответ 5
Пользователи Mac могут избегать автоматического форматирования, читая непосредственно с картонной коробки с помощью:
:r !pbpaste
Ответ 6
Несмотря на то, что установка режима вставки с помощью команды paste/nopaste/pastetoggle
является идеальной, вам все равно придется вручную включить режим вставки перед вставкой и отключить режим вставки после вставки. Будучи ленивым человеком, я - лучшее решение, которое я нашел на данный момент, которое автоматически включает режим вставки при вставке.
Вот небольшой трюк, который использует режим вставки в терминале в скобках для автоматической установки/отмены режима вставки Vim при вставке. Поместите следующее в ваш .vimrc:
let &t_SI .= "\<Esc>[?2004h"
let &t_EI .= "\<Esc>[?2004l"
inoremap <special> <expr> <Esc>[200~ XTermPasteBegin()
function! XTermPasteBegin()
set pastetoggle=<Esc>[201~
set paste
return ""
endfunction
Теперь вы можете вставлять без явного включения/выключения режима вставки - он обрабатывается автоматически для вас.
Источник: Coderwall
Примечание. Это решение не работает в WSL (подсистема Windows 10 для Linux). Если у кого-то есть решение для WSL, пожалуйста, обновите этот ответ или добавьте его в комментариях.
Tmux Если используется tmux, то объявления должны быть дважды экранированы. Код для этого также в Coderwall
Ответ 7
Вот сообщение тем, кто выяснил, как переназначить событие вставки, чтобы автоматически включить режим вставки, а затем отступить. Работает для меня в tmux/iTerm на MacOSX.
Ответ 8
Добавьте это в свой ~/.vimrc
, и вам нужно будет только нажать F2 до и после вставки:
set pastetoggle=<F2>
Ответ 9
Я просто положил set clipboard=unnamed
в мой .vimrc. Это делает карту буфера по умолчанию для буфера обмена X.
Итак, если я помечу немного текста в терминале, я могу просто нажать p
, чтобы вставить его в vim. Точно так же я могу вытащить вещи в vim (например, YY
, чтобы вытащить текущую строку в буфер) и средний щелчок в любом окне, чтобы вставить его.
Незнайка. Я считаю, что это удобно.
Ответ 10
При работе внутри терминала vim-bracketed-paste vim плагин автоматически обрабатывает пасты без каких-либо нажатий клавиш до или после пасты.
Он работает, обнаруживая режим вставки в скобках, который представляет собой escape-последовательность, отправленную "современными" терминалами, совместимыми с x-терминалами, такими как iTerm2, gnome-terminal, и другие терминалы с использованием libvte. В качестве дополнительного бонуса он также работает для сеансов tmux. Я успешно использую его с iTerm2 на Mac, подключающемся к серверу Linux, и используя tmux.
Ответ 11
Вставьте это в свой ~/.vimrc и будьте счастливы:
" enables :Paste to just do what you want
command Paste execute 'set noai | insert | set ai'
Изменить: при отражении :r !cat
- это гораздо лучший подход, поскольку он короткий, семантический и не требует пользовательского vimrc. Используйте это вместо этого!
Ответ 12
Это работает для меня (регистр для + register, что я использую как буфер обмена между aps):
imap <silent> <S-Insert> <C-O>:set noai<CR><C-R>+<C-O>:set ai<CR>
Ответ 13
Хотя :pastetoggle
или :paste
и :nopaste
должны работать нормально (если они реализованы - они не всегда так, как мы можем видеть из обсуждения), я очень рекомендую вставлять, используя прямой подход "+p
или "*p
и чтение с помощью "+r
или "*r
:
Vim имеет доступ к десяти типам регистров (:help registers
), и интересующий вас интересует quotestar
и quoteplus
из раздела
- Регистры выбора и удаления
"*
, "+
и "~
Используйте эти регистры для хранения и получения выделенного текста для графического интерфейса. См. quotestar
и quoteplus
. Когда буфер обмена недоступен или нет вместо этого используется неназванный регистр. Для систем Unix буфер обмена доступно только при наличии функции + xterm_clipboard. {не в Vi}
Обратите внимание, что существует только различие между системами" * "и" +" для X11.
:help x11-selection
дополнительно разъясняет разницу *
и +
:
quoteplus quote+
Существует три документальных варианта Х: PRIMARY (ожидается, что представляют текущий визуальный выбор - как в визуальном режиме Vim), SECONDARY (который не определен) и CLIPBOARD (который, как ожидается, будет использоваться для вырезать, копировать и вставлять файлы).
Из этих трех, Vim использует PRIMARY при чтении и записи "* register (следовательно, когда доступны варианты X11, Vim устанавливает значение по умолчанию для " clipboard "из" autoselect ") и CLIPBOARD при чтении и записи" + регистр. Vim не имеет доступа к выбору SECONDARY.
Примеры: (при условии значений по умолчанию)
-
Выберите URL-адрес в визуальном режиме в Vim. Перейдите в свой браузер и нажмите средней кнопки мыши в текстовом поле URL. Выбранный текст будет вставлен (надеюсь!). Примечание. В Firefox вы можете установить middlemouse.contentLoadURL предпочитает true в about: config, затем выбранный URL-адрес будет использоваться при нажатии средней кнопки мыши в большинстве мест в окне.
-
Выберите текст в своем браузере, перетаскивая мышью. Пойдите в Вим и нажмите среднюю кнопку мыши: выбранный текст вставлен.
- Выберите текст в Vim и сделайте "+ y". Перейдите в свой браузер, выберите текст в текстовое поле, перетаскивая мышью. Теперь используйте правую кнопку мыши и выберите "Вставить" из всплывающего меню. Выбранный текст перезаписывается текст из Vim. Обратите внимание, что текст в регистре "+" остается доступным при создании Visual выбор, который делает другой текст доступным в регистре *. Это позволяет перезаписи выделенного текста.
Ответ 14
Если вы находитесь на mac, macvim, похоже, справляется с этим, не переключая пасту.
brew установить macvim --override-system-vim
Ответ 15
Прочитайте эту статью: Переключить автоматическое отступы для вставки кода
Некоторым людям нравится визуальная обратная связь, показанная в строке состояния следующей альтернативой для vimrc
:
nnoremap <F2> :set invpaste paste?<CR>
set pastetoggle=<F2>
set showmode
Ответ 16
Самый быстрый способ, которым я должен быстро перейти в режим вставки вставки для одноразовой пасты, - это tpopes unimpaired, какие функции yo
и yo
, предположительно мнемоники для "вы открываете". Они описаны только в его vimdoc, так как:
Переключатель не был указан для "вставки", поскольку типичный пример использования обертывание одиночной вставки настолько расточительно: вы переключаетесь дважды, но вы вставляете один раз (YOPO). Вместо этого нажмите yo или yO для вызова o или O с помощью 'paste' уже установлен. Выход из режима вставки устанавливает "nopaste" автоматически.
Ответ 17
От vim: ]p
Со стороны: "*]p
или "+]p
Ответ 18
Другой способ вставки - через <CR>
и сбросить содержимое регистра (здесь - глобальный регистр). См. :h i_ctrl-r
и h i_CTRL-R_CTRL-O
.
Из справочной справки vim:
Insert the contents of a register literally and don't auto-indent. Does the same as pasting with the mouse<MiddleMouse>. Does not replace characters! The '.' register (last inserted text) is still inserted as typed.{not in Vi}
Итак, чтобы вставить содержимое в vim без автоматического отступа, используйте <CR><CO>*
в большинстве систем unix.
Примечание: это работает только в том случае, если vim скомпилирован с помощью clipboard
.
Ответ 19
К сожалению, я нашел плагин vim, о котором упоминалось, что он не работает с iTerm2 3.0.15 (честно говоря, я не знаю, если это сломалось в старых версиях) - но я нашел этот хак вместо этого.
Задать команду map-p для вставки и использования iTm2 vim. Очевидно, что это работает только для iTerm2.
Как это работает. Я использую "jk" для входа в режим эвакуации, поэтому вам также понадобится:
: inoremap jk
в вашем .vimrc.
Затем он просто вызывает P для входа в режим вставки, "+ p для вставки из буфера обмена, а затем P для отключения режима вставки. hth.
Ответ 20
Другого ответа я не видел до сих пор:
:se paste noai
Ответ 21
Собственная паста/скобки в скобках - лучший и самый простой способ со времен vim 8
(выпущен в 2016 году). Это даже работает над SSH! (Вставка в скобках работает на Linux и Mac, но не на Windows Git Bash)
-
Убедитесь, что у вас есть vim 8+ (вам не нужны +clipboard
или +xterm_clipboard
).
vim --version | head -1
-
Просто используйте собственную команду вставки ОС (например, ctrl+shift+V
или cmd+V
) в обычном режиме. Не нажимайте i
для режима вставки.
Тестовое задание
-
Скопируйте (ctrl+shift+C
или cmd+C
) вывод этого (2 строки с отступом табуляции) в системный буфер обмена:
echo -e '\ta\n\tb'
-
Запустите чистый vim 8+ с автоматическим отступом:
vim -u NONE --noplugin -c 'set autoindent'
-
Вставьте из системного буфера обмена (ctrl+shift+V
или cmd+V
) в обычном режиме. Не нажимайте i
для режима вставки. И a
b
должны быть приведены в соответствие с одной вкладки отступа. Вы даже можете сделать это при подключении к удаленному компьютеру (удаленному компьютеру потребуется vim 8+).
-
Теперь попробуйте старый способ, при котором вторая строка будет автоматически вставлена с дополнительной вкладкой: нажмите i
для режима вставки. Затем вставьте, используя ctrl+shift+V
или cmd+V
И a
b
разрегулированы в настоящее время.
Установка Vim 8