Вставка кода в окно терминала в vim на Mac OS X

Когда я вставляю код в мое оконное окно Mac OS X в vim, он откладывает каждую строку. Для каждой строки добавляется отступ, поэтому текст выглядит так …

"ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." 

Моим текущим обходным путем я вставляю текст сначала в текстовый редактор textmate, который сохраняет правильное форматирование. Затем я сохраняю этот файл и открываю его в vim. Затем я использую vim yank, чтобы вставить его.
Есть ли параметр в моем .vimrc, который может изменить это поведение? Или это проблема с терминами?

В пределах vim:

 :set paste 

Поместите Vim в режим вставки. Это полезно, если вы хотите вырезать или скопировать некоторый текст из одного windows и вставить его в Vim. Это позволит избежать неожиданных эффектов.

Начиная с Mac OS X Lion 10.7, Terminal поддерживает «режим вставки в скобках», который позволяет эмулятору терминала сообщать программе, подключенной к tty, когда пользователь вставляет текст, чтобы программа не интерпретировала его как команды редактирования. Программы, которые его поддерживают, отправляют терминалу escape-последовательность, чтобы включить этот режим, в котором терминал окружает вложенный текст с помощью пары управляющих последовательностей, которые идентифицируют начало и конец.

Чтобы включить это в Vim, поместите следующий код в ваш файл ~ / .vimrc:

 if &term =~ "xterm.*" let &t_ti = &t_ti . "\e[?2004h" let &t_te = "\e[?2004l" . &t_te function! XTermPasteBegin(ret) set pastetoggle=[201~ set paste return a:ret endfunction map  [200~ XTermPasteBegin("i") imap  [200~ XTermPasteBegin("") vmap  [200~ XTermPasteBegin("c") cmap [200~  cmap [201~  endif 

Это делает так, что, когда Vim переключает терминал на / из альтернативного экрана † (t_ti, t_te), он включает / отключает режим вставки в скобках (ESC [? 2004 h, ESC [? 2004 l). Когда он получает escape-последовательность, указывающую начало вставки (ESC [200 ~), он включает режим вставки (установка пасты) и в случае необходимости переключается в режим вставки («i»). Когда он получает соответствующий маркер конца пасты (ESC [201 ~), он отключает режим вставки (пастообразный) и остается в режиме Insert. Команды cmap устраивают командную строку Vim, чтобы игнорировать escape-последовательности и принимать вставленный текст как есть.

Обратите внимание, что это разрешает только режим вставки в скобки, когда значение $ TERM начинается с «xterm …»; если вы устанавливаете $ TERM на что-то еще, вы можете пересмотреть этот тест, включив в него значение $ TERM. Или вы можете полностью отказаться от теста, поскольку это не является абсолютно необходимым – это просто попытка быть осторожным, чтобы не делать что-то, что может быть несовместимо с каким-либо другим типом терминала.

В терминале это работает со всеми командами Paste, а также с drag and dropм.

† Терминал имеет главный экран и «альтернативный» экран. Каждый экран имеет собственное содержимое и состояние. Текст на альтернативном экране не прокручивается в журнал прокрутки. Он обычно используется программами, которые берут на себя управление всем экраном и поэтому называются «полноэкранными» программами. Например, vim, emacs, less и top, например.

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

 set pastetoggle= 

к вашему .vimrc. Теперь вы можете включить режим вставки, нажав F2 (или любую другую клавишу, которую вы выберете).

В vim

: установить пасту

когда вы хотите отключить его

: set nopaste

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

 "+p 

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

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

Это работает в терминале, iTerm2 и любых «современных» терминалах, совместимых с x-терминалами, которые поддерживают режим вставки в скобки. В качестве дополнительного бонуса он также работает для сеансов tmux. Я успешно использую его с iTerm2 на Mac, подключающемся к серверу linux, и используя tmux.

Плагин в основном представляет собой упакованную версию функциональности, которую @Chris Page перечисляет в своем ответе .

  • psql: FATAL: роли "postgres" не существует
  • Сообщение об ошибке при запуске терминала
  • Что это означает в оболочке, когда мы помещаем команду в знак доллара и круглые скобки: $ (команда)
  • Как восстановить .bash_profile на mac? Ни один из моих терминалов unix не работает
  • Mac Terminal - ошибка «указатель освобождается не была» при открытии терминала
  • Haskell читает исходный ввод с клавиатуры
  • Как использовать команду «cd» с использованием времени выполнения Java?
  • Interesting Posts
    Давайте будем гением компьютера.