Отключение автоматического отступа при вставке текста в vim - PullRequest
1071 голосов
/ 25 марта 2010

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

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

line
  line
    line

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

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

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

Ответы [ 21 ]

7 голосов
/ 08 июня 2013

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

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

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

4 голосов
/ 01 июня 2012

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

imap <silent> <S-Insert> <C-O>:set noai<CR><C-R>+<C-O>:set ai<CR>
3 голосов
/ 18 апреля 2017

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

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

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

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

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

:help x11-selection дополнительно разъясняет разницу между * и +:

                                                  quoteplus quote+

Существует три документированных выбора X: ПЕРВИЧНЫЙ (который, как ожидается, представляет текущий визуальный выбор - как в визуальном режиме Vim), ВТОРИЧНЫЙ (который плохо определен) и CLIPBOARD (который, как ожидается, будет использоваться для операции вырезания, копирования и вставки).

Из этих трех Vim использует PRIMARY при чтении и записи "* регистра (следовательно, когда выбор X11 доступен, Vim устанавливает значение по умолчанию для 'clipboard' из 'autoselect') и CLIPBOARD при чтении и записи "+ регистр. Vim не имеет доступа к ВТОРИЧНОМУ выбору.

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

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

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

  • Выберите какой-нибудь текст в Vim и сделайте "+ y. Перейдите в браузер, выберите какой-нибудь текст в текстовое поле, перетаскивая мышью. Теперь используйте правую кнопку мыши и выберите «Вставить» из всплывающего меню. Выбранный текст перезаписывается текст от Vim. Обратите внимание, что текст в регистре «+» остается доступным при создании визуального выделение, которое делает другой текст доступным в регистре "*. Это позволяет перезапись выделенного текста.
2 голосов
/ 18 мая 2014

Если вы работаете на Mac, Macvim, похоже, справится с этим без необходимости переключения пасты.

brew install macvim --override-system-vim

1 голос
/ 22 июля 2018

Из vim: ]p

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

1 голос
/ 14 августа 2015

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

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

1 голос
/ 01 июля 2015

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

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

nnoremap <F2> :set invpaste paste?<CR>
set pastetoggle=<F2>
set showmode
0 голосов
/ 27 июня 2019

Нативная паста / паста в скобках - лучший и самый простой способ с vim 8 (выпущен в 2016 году). Это даже работает над SSH! (Вставка в скобках работает на Linux и Mac, но не на Windows Git Bash)

  1. Убедитесь, что у вас vim 8+ (вам не нужны опции +clipboard или +xterm_clipboard).

    vim --version | head -1

  2. Просто используйте собственную команду вставки ОС (например, ctrl+shift+V или cmd+V) в обычном режиме. Не нажимайте i для режима вставки.


Test

  1. Скопируйте (ctrl+shift+C или cmd+C) вывод этого (2 строки с отступом табуляции) в системный буфер обмена:

    echo -e '\ta\n\tb'

  2. Запустите чистый vim 8+ с автоматическим отступом:

    vim -u NONE --noplugin -c 'set autoindent'

  3. Вставить из системного буфера обмена (ctrl+shift+V или cmd+V) в обычном режиме. Не нажимайте i для режима вставки. a и b должны быть выровнены с одним отступом табуляции. Вы даже можете сделать это при подключении по ssh к удаленному компьютеру (удаленному компьютеру потребуется vim 8+).

  4. Теперь попробуйте старый способ, при котором вторая строка будет автоматически вставлена ​​с дополнительной вкладкой: нажмите i для режима вставки. Затем вставьте, используя ctrl+shift+V или cmd+V. a и b теперь не выровнены.


Установка Vim 8

0 голосов
/ 25 мая 2019

Другого ответа я не видел до сих пор:

:se paste noai
0 голосов
/ 16 сентября 2017

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

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

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

: inoremap jk

в вашем .vimrc.

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

enter image description here

...