Умный отступ в vim (обычно отличный) — это катастрофа при вставке фрагмента кода.

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

Какие решения или обходные пути у вас есть для этого?

Добавлено: есть также настройка, которая заставляет комментарии автоматически продолжаться на следующей строке. Отступ, по крайней мере, не меняет семантику кода, но автоматическое продолжение комментария действительно портит ситуацию. Если подумать, я должен просто отключить это вообще — кто-нибудь знает, как называется эта опция?


person dreeves    schedule 22.01.2009    source источник


Ответы (4)


:set paste — это то, что нужно, но если вы забудете, как это часто делаю я, то если вы используете язык с {} в качестве открытия/закрытия блоков, тогда выполнение =% на первом { или последнем } будет повторно применить отступ.

person Craig H    schedule 22.01.2009
comment
На самом деле это работает с любым языковым плагином, который правильно определяет блоки — например, ruby ​​может сделать это из файла end. - person Dan Fitch; 23.01.2009

добавьте это в свой .vimrc и используйте его с клавишей F2 для переключения статуса вставки до и после добавления фрагментов кода:

set pastetoggle=<F2>
person kguest    schedule 24.03.2010

Другой способ сделать это, если у вас правильно настроен системный буфер обмена, - это сделать

"*p

Это будет вставлено из системного буфера обмена.

Проверьте свой vim --version. Думаю, в OS X вам понадобится +clipboard, а в Linux +xterm_clipboard.

Если вы используете OS X, вы всегда можете brew install macvim и использовать mvim -v вместо входящего в комплект Vim (он не был скомпилирован с +clipboard).

person Aaron Jensen    schedule 16.08.2012
comment
проверьте свою версию vim --version. найдите +xterm_clipboard или +clipboard. Я использую mvim -v. У меня есть -xterm_clipboard, но +clipboard и он отлично работает. - person Aaron Jensen; 17.08.2012

person    schedule
comment
:set nopaste - включить отступы - person J.J.; 22.01.2009
comment
о хо, спасибо. поэтому вы должны помнить, чтобы установить и отключить его до и после вставки? Я думаю, что ничего более автоматического невозможно без программного способа различения вставки и ввода. - person dreeves; 22.01.2009
comment
Вы можете использовать Key Mapping, чтобы связать его с набором ключей. Но я никогда не пробовал это. shlomifish.org/lecture/Vim/beginners/slides/slide30.html< /а> - person J.J.; 22.01.2009
comment
Круто, хочешь включить это в свой ответ? И, возможно, добавить что-то о функции, которая автоматически продолжает комментировать, если вы понимаете, о чем я там говорю. - person dreeves; 23.01.2009
comment
@dreeves: автоматическое продолжение комментирования также отключается с помощью :set paste - person Dan Fitch; 23.01.2009
comment
Хороший вопрос, хотя в этом случае нет простого исправления постфактум, как с отступами, поэтому я думаю, что лучше просто отключу эту функцию. - person dreeves; 23.01.2009
comment
@dreeves: :set fo-=r :he fo-table для получения дополнительной информации обо всем, что вы можете установить - person Dan Fitch; 23.01.2009
comment
(дох, забыл про разрывы строк в комментариях -- :он, очевидно, отдельная команда... и теперь я перестану пускать под откос эту ветку комментариев) - person Dan Fitch; 23.01.2009
comment
Это также полезно: au InsertLeave * set nopaste -- никто не хочет, чтобы это осталось! - person kenny; 16.08.2012