Отключение автоматического отступа при вставке текста в Vim



Я прилагаю усилия, чтобы узнать Vim.



когда я вставляю код в свой документ из буфера обмена, я получаю дополнительные пробелы в начале каждой новой строки:



line
line
line


Я знаю, что вы можете отключить автоматический отступ, но я не могу заставить его работать, потому что у меня есть некоторые другие настройки, конфликтующие или что-то (которые выглядят довольно очевидными в моем .vimrc, но, похоже, не имеет значения, когда я их вынимаю).



Как отключить автоматический отступ, когда я вставляю код, но все еще имею vim но когда я пишу код? Вот мой .vimrc file:



set expandtab  
set tabstop=2
set shiftwidth=2
set autoindent
set smartindent
set bg=dark
set nowrap
946   19  

19 ответов:

обновление: лучше ответьте здесь: https://stackoverflow.com/a/38258720/62202

отключить автоотступа, когда вы вставляете код, есть специальный режим "Паста".

тип

:set paste

затем вставьте свой код. Обратите внимание, что текст во всплывающей подсказке теперь говорит -- INSERT (paste) --.

после того, как вы вставили свой код, выключите режим вставки, чтобы автоматический отступ при вводе работал правильно снова.

:set nopaste

однако, я всегда находил это громоздким. Вот почему я составляю карту <F3> таким образом, что он может переключаться между режимами вставки и nopaste при редактировании текста! я добавляю это к .vimrc

set pastetoggle=<F3>

чтобы избежать нежелательных эффектов при вставке, есть опция, которая должна быть установлена:

set paste

полезная команда, чтобы в вашем .vimrc составляет set pastetoggle=<F10> или какая-то другая кнопка, чтобы легко переключаться между пастой и nopaste.

Я обычно использую :r! cat а потом вставить ( shift + insert ) содержание, и CTRL+D.

нет необходимости включать и отключать, прямое использование.

Если вы работаете локально, вы можете вставить из системного буфера обмена с ключевой последовательностью:

"+p

Это правильное команду Vim, так что не надо беспокоиться о вводе в режиме вставки или отключения первого автоотступа.

конечно, если вы работаете удаленно (консоль через SSH, например), то это не будет работать, и вы должны пойти :set noai, режим вставки, вставить в консоль, оставить insertmode,:set ai маршрута, как описано в другом месте.

пользователи Mac могут избежать автоматического форматирования, читая непосредственно из картона с:

:r !pbpaste

вот пост кто-то, кто понял, как переназначить событие вставки, чтобы автоматически включить режим вставки, а затем отступить. Работает для меня в tmux / iTerm на MacOSX.

при установке режима вставки с 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

добавьте это в ваш ~/.vimrc и вам останется только нажать клавишу F2 до и после оклейки:

set pastetoggle=<F2>

Я просто ставлю set clipboard=unnamed в моем .vimrc. Это делает карту буфера вставки по умолчанию в буфер обмена X.

Итак, если я отмечаю немного текста в терминале, я могу просто нажать p чтобы вставить его в vim. Точно так же я могу дергать вещи в vim (например YY чтобы дернуть текущую строку в буфер) и средний щелчок в любом окне, чтобы вставить его.

не знаю. Я считаю, что это очень удобно.

при работе внутри терминала vim-bracketed-paste Vim плагин будет автоматически обрабатывать пасты без необходимости каких-либо нажатий клавиш до или после вставки.

Он работает путем обнаружения режим вставки в скобках который является escape-последовательностью, отправленной" современными " X-терминальными совместимыми терминалами, такими как iTerm2, gnome-terminal и другими терминалами, использующими libvte. В качестве дополнительного бонуса он работает также на сессии tmux. Я использую его успешно с iTerm2 на Mac подключение к серверу linux и использование tmux.

положите его в ваш ~/.vimrc и будьте счастливы:

" enables :Paste to just do what you want
command Paste execute 'set noai | insert | set ai'

Edit: on reflection,:r !cat это гораздо лучший подход, так как он короткий, семантический и не требует специального vimrc. Используйте это вместо этого!

это работает для меня ( случай для + register, что я использую как буфер обмена между aps):

imap <silent> <S-Insert> <C-O>:set noai<CR><C-R>+<C-O>:set ai<CR>

хотя :pastetoggle или :paste и :nopaste должно работать нормально (если реализовано-они не всегда, как мы можем видеть из обсуждения) я очень рекомендую вставку с использованием прямого подхода "+p или "*p и чтение с "+r или "*r:

Vim имеет доступ к десяти типов регистров (:help registers) и спрашивающий интересуется quotestar и quoteplus из раздела

  1. выбор и падение регистров "*,"+ и "~

использовать эти регистры для хранения и извлечения выделенного текста для GUI. Смотрите quotestar и quoteplus. Когда буфер обмена недоступен или нет работая, вместо этого используется безымянный регистр. Для систем Unix буфер обмена доступно только тогда, когда функция +xterm_clipboard присутствует. {не в Vi}

обратите внимание, что существует только различие между "* и "+ для систем X11.

:help x11-selection далее уточняет разницу * и +:

                                                  quoteplus quote+

есть три документированных выбора X: первичный (который, как ожидается , представляют текущий визуальный выбор-как в визуальном режиме Vim), вторичный (который плохо определен) и буфер обмена (который, как ожидается, будет использоваться для операции вырезания, копирования и вставки).

из этих трех, Vim использует первичный при чтении и записи " * регистр (следовательно, когда выбор X11 доступно, Vim устанавливает значение по умолчанию для "буфер обмена "из " автоселекта"), и буфер обмена при чтении и записи "+ реестр. Vim не имеет доступа к вторичному выбору.

примеры: (предполагая значения параметров по умолчанию)

  • выберите URL-адрес в визуальном режиме в Vim. Перейдите в браузер и нажмите кнопку средняя кнопка мыши в текстовом поле URL. Выделенный текст будет вставил (надеюсь!). Примечание: В Firefox вы можете установить middlemouse.предпочтение contentLoadURL к true в about: config, затем выбранный URL будет использоваться при нажатии средней кнопки мыши в большинстве мест в окне.

  • выберите текст в браузере, перетаскивая его мышью. Перейти к Vim и нажмите среднюю кнопку мыши: выделенный текст вставлен.

  • выделить текст в Vim и у "+г. Заходим в браузер, выделите текст в в поле путем перетаскивания с помощью мыши. Теперь использовать правой кнопкой мыши и выберите "Вставить" из всплывающего меню. Выделенный текст заменяется текст из Vim. Обратите внимание, что текст в " + регистре остается доступным при создании визуального элемента выбор, который делает другой текст доступным в " * регистре. Что позволяет заменяя выделенный текст.

Если вы находитесь на mac, macvim, похоже, хорошо справляется с этим, не переключая вставку.

brew install macvim --override-system-vim

пожалуйста, прочитайте эту статью: переключение автоматического отступа для вставки кода

некоторым людям нравится визуальная обратная связь, показанная в строке состояния следующей альтернативой для вашего vimrc:

nnoremap <F2> :set invpaste paste?<CR>
set pastetoggle=<F2>
set showmode

самый быстрый способ, о котором я знаю, чтобы быстро перейти в режим вставки-вставки для одноразовой вставки,-это tpope живое, которая включает yo и yO, предположительно мнемоника для "Вы открываете". Они только задокументированы в его vimdoc, как:

переключатель не был предусмотрен для "вставить", потому что типичный случай использования обертывание одиночной вставки настолько расточительно: вы переключаете дважды, но вы вставляете только один раз (YOPO). Вместо этого нажмите yo или yO, чтобы вызвать o или O с помощью "вставить" уже установлен. Оставив nopaste вставить задает режим автоматического.

другой способ вставки через <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.

к сожалению, я обнаружил, что плагин vim упомянул, что он не работает с iTerm2 3.0.15 (честно говоря, я не знаю, сломался ли он на более старых версиях), но вместо этого я нашел этот хак.

команда Map-p для выполнения вставки и использования ключей iTerm2 vim. Очевидно, что это работает только для iTerm2.

Как это работает. Я использую "jk" для входа в режим побега, поэтому вам также понадобится:

: inoremap jk

в свой .vimrc.

затем он просто вызывает P для ввода вставки режим " +p для вставки из буфера обмена, а затем P для отключения режима вставки. ХТ.

enter image description here

от vim:]p

снаружи: "*]p или "+]p

Comments

    Ничего не найдено.