Я прилагаю усилия, чтобы изучить Vim.
Когда я вставляю код в свой документ из буфера обмена, я получаю дополнительные пробелы в начале каждой новой строки:
line
line
line
Я знаю, что вы можете отключить автоматический отступ, но я не могу заставить его работать, потому что у меня есть другие параметры, конфликтующие или что-то в этом роде (что выглядит довольно очевидно в моем .vimrc, но, кажется, не имеет значения, когда я их вынимаю).
Как отключить автоматический отступ, когда я вставляю код, но при написании кода все еще есть vim auto Indent? Вот мой .vimrc
файл:
set expandtab
set tabstop=2
set shiftwidth=2
set autoindent
set smartindent
set bg=dark
set nowrap
cat > mynewfile.txt
нажать Enter , вставить свой текст, снова нажать Enter , а затем Ctr + D, чтобы сохранить. Файл теперь создан, и вы можете редактировать егоvim mynewfile.txt
.Ответы:
Обновление: лучше ответ здесь: https://stackoverflow.com/a/38258720/62202
Чтобы отключить автоиндентирование при вставке кода, есть специальный режим «вставки».
Тип
Затем вставьте свой код. Обратите внимание, что текст во всплывающей подсказке теперь говорит
-- INSERT (paste) --
.После того, как вы вставили свой код, выключите режим вставки, чтобы автоматический ввод отступа при вводе снова работал правильно.
Тем не менее, я всегда находил это громоздким. Вот почему я отображаю так
<F3>
, что он может переключаться между режимами вставки и nopaste при редактировании текста! Я добавляю это к.vimrc
источник
:set noai
следуют:set ai
. Предложение:r! cat
короче.set paste
проще, определенно. Это гораздо более семантически, чемnoai
или дажеnoautoindent
, что более важно, когда ввод «noai» и «paste» занимает примерно одинаковое количество времени, когда вы достаточно опытны в качестве машинистки на ощупь.:set noai
не всегда работает, в зависимости от того, как настроены другие параметры, связанные с отступом, согласно OP.:set paste
кажется сокращением для нескольких настроек одновременно.set copyindent
позаботимся об этом для вас без проблем.:set paste
также отключает другие функции, такие как завершение фигурных скобок, что также не требуется при вставке кода.Чтобы избежать нежелательных эффектов при вставке, есть параметр, который необходимо установить:
Полезная команда, которая должна быть в вашем .vimrc - это
set pastetoggle=<F10>
или другая кнопка, чтобы легко переключаться между вставкой и nopaste.источник
nmap <silent> <leader>p :set paste<CR>"*p:set nopaste<CR>
Я обычно использую,
:r! cat
а затем вставляю( shift + insert )
содержимое, иCTRL+D
.Нет необходимости включать и отключать, прямое использование.
источник
:r! cat
работает.:r
вставляет содержимое файла в текущий документ.!cat
говорит, что запустить cat, которая по существу открывает stdin (* nix shells)(shift + insert)
или для некоторых терминалов, щелчок правой кнопкой мыши вставит содержимое буфера обмена вCTRL+D
конец файла, поэтому он закроет:r !cat
сеанс.paste
сделана исключительно для этой цели? @jvriesem Это не «прямой» вариант, если я правильно понимаю, что вы понимаете это слово.:r! cat
затем,CTRL+SHIFT+V
чтобы вставить в терминал (затемCTRL+D
).Если вы работаете локально, вы можете вставить из системного буфера обмена последовательность клавиш:
"+p
Это правильная команда vim, поэтому не нужно беспокоиться о входе в режим вставки или об отключении автоматического отступа.
Конечно, если вы работаете удаленно (например, через консоль через SSH), это не сработает, и вы должны перейти в
:set noai
режим вставки, вставить в консоль, оставить режим вставки, выполнить:set ai
маршрутизацию, как описано в другом месте.источник
:set paste
и:set nopaste
вместо этого, потому что, несмотря на то, что он длиннее, его легче запомнить, и мне не нужно искать его каждый раз!:set paste
это не реализовано, поэтому:set noai
следует использовать вместо этого.<leader>p
... очень полезно!Хотя установка режима вставки с помощью
paste/nopaste/pastetoggle
отлично подходит, вам все равно придется вручную включить режим вставки перед вставкой и отключить режим вставки после вставки. Будучи ленивым человеком, я - лучшее решение, которое я нашел на данный момент, которое автоматически включает режим вставки при вставке.Источник: Coderwall
Замечания: Это решение не работает в WSL (подсистема Windows 10 для Linux). Если у кого-то есть решение для WSL, пожалуйста, обновите этот ответ или добавьте его в комментариях.
Tmux При использовании tmux, объявления должны быть дважды экранированы. Код для этого также в Coderwall
источник
t_SI
иt_EI
переменные позволяет вставить в скобках и отключить его. Когда брекетинг вставки включен, перед вставляемым текстом ставится префиксesc[200~
и после негоesc[201~
.Пользователи Mac могут избежать автоматического форматирования, читая непосредственно с монтажной панели с помощью:
источник
:.!pbpaste
, это должно работать, заменяя текущую строку выводом буфера вставки. В общем случае vim позволяет передавать данные из вашего текущего файла в другую программу и заменять текст выводом команды. Таким образом,:1,3!pbpaste
первые три строки вашего файла заменяются буфером вставки. Я использую:.!ppjson
очень длинную (неформатированную строку JSON), форматирую ее и заменяю длинную строку форматированным эквивалентом. ppjson - это просто скрипт bash, который запускаетсяpython -m json.tool
.Вот сообщение того, кто выяснил, как переназначить событие вставки, чтобы автоматически включить режим вставки и затем снова выключить. У меня работает в tmux / iTerm на MacOSX.
источник
Добавьте это к вашему,
~/.vimrc
и вам нужно будет только нажать F2 до и после вставки:источник
Я просто вставил
set clipboard=unnamed
свой .vimrc. Это делает карту буфера вставки по умолчанию в буфер обмена X.Поэтому, если я отмечу немного текста в терминале, я могу просто нажать,
p
чтобы вставить его в vim. Точно так же я могу дергать вещи в Vim (например,YY
чтобы вставить текущую строку в буфер) и щелкнуть средней кнопкой мыши в любом окне, чтобы вставить его.Не знаю. Я нахожу это супер удобным.
источник
При работе внутри терминала vim-bracketed-paste плагин vim будет автоматически обрабатывать без необходимости нажатия клавиш до или после вставки.
Он работает путем обнаружения режима вставки в скобках, который представляет собой escape-последовательность, отправляемую «современными» терминалами, совместимыми с x-term, такими как iTerm2, gnome-терминал и другие терминалы, использующие libvte. В качестве дополнительного бонуса он работает также для сеансов tmux. Я успешно использую его с iTerm2 на Mac, подключаясь к серверу Linux и используя tmux.
источник
Вставьте это в ваш ~ / .vimrc и будьте счастливы:
Изменить: при отражении,
:r !cat
это гораздо лучший подход, так как он короткий, семантический и не требует никакого пользовательского vimrc. Используйте это вместо этого!источник
Хотя
:pastetoggle
или:paste
и:nopaste
должно работать нормально (если реализовано - они не всегда, как мы видим из обсуждения), я настоятельно рекомендую вставлять с использованием прямого подхода"+p
или"*p
и читать с"+r
или"*r
:Vim имеет доступ к десяти типам регистров (
:help registers
), а спрашивающий интересуетсяquotestar
иquoteplus
из раздела:help x11-selection
далее разъясняет разницу*
и+
:источник
Это работает для меня (случай + регистр, что я использую как буфер обмена между aps):
источник
Если вы работаете на Mac, Macvim, кажется, справится с этим без необходимости переключения пасты.
brew install macvim --override-system-vim
источник
.vimrc
файл?Пожалуйста, прочитайте эту статью: Переключите авто-отступ для вставки кода
источник
Самый быстрый способ, которым я знаю, чтобы быстро перейти в режим вставки-вставки для вставки одним выстрелом, - это незатронутая tpope , которая имеет
yo
иyO
, по-видимому, мнемонику для «вы открываете». Они только зарегистрированы в его vimdoc, как:источник
Другой способ вставки - через
<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:
]p
Снаружи:
"*]p
или"+]p
источник
Другого ответа я не видел до сих пор:
источник
Нативная паста / паста в скобках - лучший и самый простой способ с тех пор
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+ с autoindent:
vim -u NONE --noplugin -c 'set autoindent'
Вставить из системного буфера обмена (
ctrl+shift+V
илиcmd+V
) в обычном режиме. Не нажимайтеi
для режима вставки. Символa
иb
должен быть выровнен с отступом одной вкладки. Вы даже можете сделать это при подключении по ssh к удаленному компьютеру (удаленному компьютеру потребуется vim 8+).Теперь попробуйте старый способ, при котором вторая строка будет автоматически вставлена с дополнительной вкладкой: нажмите
i
для режима вставки. Затем вставьте с помощьюctrl+shift+V
илиcmd+V
.a
Иb
разрегулированы в настоящее время.Установка Vim 8
Ubuntu 18.04 - поставляется с Vim 8 по умолчанию .
Ubuntu 16.04 - установить с PPA .
brew install vim
источник
Featured snippet
для моего поиска «вставить контент без вкладок vim», может быть потому, что я использовал ключевое слово «вкладка», только в этом ответе упоминалось :)К сожалению, я обнаружил, что упомянутый плагин vim не работает с iTerm2 3.0.15 (честно говоря, я не знаю, сломался ли он на старых версиях) - но вместо этого я нашел этот хак.
Сопоставьте команду p для вставки и использования ключей ver iTerm2. Очевидно, это работает только для iTerm2.
Как это работает. Я использую "JK", чтобы войти в режим побега, поэтому вам также понадобится:
: inoremap jk
в вашем .vimrc.
Затем он просто вызывает P, чтобы войти в режим вставки, "+ p, чтобы вставить из буфера обмена, а затем P, чтобы отключить режим вставки. Hth.
источник