Как скопировать содержимое вставки в редактор vi

165

Я пытался использовать Ctrl+ Vдля вставки содержимого в документ редактора vi, но Ctrl+ Vне интерпретируется как вставка.

гн
источник
16
Просто обратите внимание, что основная причина использования Vi в том, что Vim не установлен. Если у вас установлен Vim, возможно, стоит использовать его вместо этого. Vi на самом деле не имеет никаких преимуществ, кроме того, что он уже присутствует в каждой установке Unix. На мой взгляд, лучший способ изучить Vim - это открыть эмулятор терминала (не из Vim) и набрать « vimtutorОн», и вы получите скорость до того места, где его можно использовать примерно через 45 минут.
Бен Мордехай
1
+1 @BenMordecai - я уже был знаком с vi (из старых), включая его удобную функцию sub-shell, но мне нужно было это обновить. Отличное занятие. Прошел через это как ветер. Благодарю.
Cbhihe

Ответы:

192

Сначала убедитесь, что вы находитесь в режиме редактирования (нажмите i). Затем вы можете вставить с Ctrl+ Shift+ V, если вы находитесь в эмуляторе терминала, как gnome-terminal(или выберите «Вставить» в меню правой кнопкой мыши).

Вы также можете ввести :set pastevim перед вставкой, чтобы отключить автоматический отступ и т. Д. Затем :set nopasteпосле вставки содержимого.

Также проверьте этот вопрос на stackoverflow.com для получения дополнительной информации.

Если вы хотите скопировать / вставить строки vim(в отличие от вставки содержимого буфера обмена), вам нужно проверить команду yank . Вот шпаргалка, которая может помочь.

Аттила О.
источник
1
Я думаю, что если у вас есть курсор мыши, вы не можете вставить, используя Ctrl + Shift + V.
Элвин Вонг
14
Просто примечание, с Iучетом регистра. Нижний регистр i- это обычный способ входа в режим вставки. Заглавная Iпереводит курсор в начало строки, а затем вводит вас в режим вставки.
Бен Мордехай,
64

Vi (и Vim) работает совсем по-другому по сравнению с обычным текстовым редактором, таким как Gedit. У этого также есть довольно крутая кривая изучения. Если вы хотите выучить некоторые основные команды, начните с этого интерактивного урока .

Тем не менее, чтобы ответить на ваш вопрос. Доступ к содержимому системного буфера обмена возможен через регистр «плюс». Таким образом, чтобы вставить что-то из системного буфера обмена, вы можете в обычном режиме нажать: "+p(Не одновременно, а один за другим).

Даниэль Йонссон
источник
3
Это то, чего я не знал до сих пор. Также +1 за ссылку на еще один замечательный учебник vim.
Аттила О.
19
Говоря о кривых обучения для редакторов, есть «классические кривые обучения для некоторых распространенных редакторов», blog.thilelli.net/public/store/attached/curves.jpg .
Хловдал
В терминале GNOME ярлыками для копирования и вставки являются Ctrl-Shift-C и Ctrl-Shift-V соответственно.
Flimm
1
Я по очереди пытался нажать <kbd> "</ kbd>, <kbd> + </ kbd> и <kbd> p </ kbd>, а также <kbd>" </ kbd> и <kbd> p < / kbd> и ничего не произошло. Что я сделал не так? Я viне vim
пользуюсь
1
Это правильный ответ. Используя, например. Ctrl-Shift-v будет работать только с самым простым содержимым (разрывы строк и отступы могут быть действительно неправильными, если вы находитесь в терминале, и вы забыли использовать set :paste).
rsenna
29
  1. Если вы хотите скопировать содержимое вставки в тот же файл , используйте yankи paste.

  2. Если вы хотите скопировать содержимое вставки через терминалы , откройте первый файл, набрав нужный текст, затем откройте второй файл в vim (например :tabnew /path/to/second/file) и нажмите, pчтобы вставить его.

  3. Если вы хотите скопировать содержимое вставки из vim во внешнюю программу , вам нужно получить доступ к системному буферу обмена. Я предполагаю, что вы используете Ubuntu. Версия vim с графическим интерфейсом всегда имеет поддержку буфера обмена, однако, если вы хотите использовать Vim из терминала, вам придется проверить поддержку буфера обмена X11.

    С консоли введите:

    $ vim --version | grep xterm
    

    Если вы найдете -xterm_clipboard , у вас есть два варианта:

    1) Скомпилируйте vim самостоятельно, установив флаг xterm_clipboard на

    2) Удалите vim, установите вместо него gvim (vim-gtk или vim-gnome). Вы можете придерживаться vim без gui, вызывая vim из терминала, так же, как вы делали это раньше. На этот раз, когда вы проверяете, вы должны найти + xterm_clipborad .

    Теперь, когда вы вытаскиваете некоторый текст в регистр + внутри вашего редактора vim (например, «+ yy»), он также копируется в системный буфер обмена, который вы можете извлечь из вашей внешней программы, такой как редактор gedit, с помощью Ctrl+ V.

  4. Если вы хотите скопировать содержимое вставки из внешней программы в vim , сначала скопируйте текст в системный буфер обмена с помощью Ctrl+ C, затем в режиме вставки редактора vim щелкните среднюю кнопку мыши (обычно колесо) или нажмите Ctrl+ Shift+, Vчтобы вставить.

    Это 4 основных условия копирования и вставки, связанных с vim. Надеюсь, это поможет.

47dev47null
источник
Какой смысл: tabnew / path / to / second / file? Вы можете добиться того же, что и в первом файле: копировать / копировать / вырезать, открывая второй файл с: vi / path / to / second / file и вставляя в него (p / P). По крайней мере, в моем случае ... Или потому, что у меня включена функция + xterm_clipboard vim? Или есть что-то большее, чем просто новое?
Cbhihe
1
На Ubuntu vim-gtkесть xterm_clipboardподдержка и на Fedora xvim.
icc97
18

Я всегда использую Shift+, Insertкогда хочу вставить текст в терминал, работает во всех терминальных программах.

(По этой же причине я никогда не получаю ноутбук, на котором невозможно нажать, Insertне нажимая вторичную клавишу)

Магнус Йонссон
источник
2
Vi/ Vim! = терминал;)
0xC0000022L
1
хорошо хорошо, но это все еще работает :)
Магнус Йонссон
+1 за это .. Что вы используете, чтобы выполнить, скажем Ctrl+A, Ctrl+Cтоже?
Arup Rakshit
Если я использую терминал внутри DE, я обычно просто выделяю текст мышью и копирую с помощью Ctrl + Shift + C.
Магнус Йонссон
Shift + Insert также работает в gvim. (Я использую Ubuntu 13.10, если это что-то
меняет
10

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

Это полезно, когда у вас нет доступа к системному буферу обмена (например, в удаленном сеансе SSH).

Должен быть в режиме редактирования / вставки для Vim.

воли О.Б.
источник
6

Как только вы введете vi, нажмите, iчтобы войти в режим вставки, щелкните правой кнопкой мыши в терминале, нажмите Вставить.

ОК 13
источник
Я думал, что строчные i. Что делает заглавные буквы I?
Flimm
@Flimm, который уже объяснялся в комментарии Бена Мордехая о другом ответе.
sierrasdetandil
Я отредактировал ответ в нижнем регистре i. Верхний регистр Iперемещает курсор в начало строки перед переходом в режим вставки, который здесь не нужен.
Flimm
6

Подробные инструкции для копирования / вставки строк текста в vi с использованием yankиput

(используйте следующее в командном режиме vi)

Копировать (YANK)

Чтобы скопировать одну строку в vi:

  • В командном режиме переместите курсор на строку, которую необходимо скопировать, и введите yyили введитеY

Чтобы скопировать 2 строки в vi:

  • В командном режиме переместите курсор на первую строку, которую необходимо скопировать, и введите 2yyили введите2Y

(аналогично, любое количество строк может быть скопировано)

Чтобы скопировать все строки из текущего местоположения в конец файла:

  • В командном режиме переместите курсор на первую строку, которую необходимо скопировать, и введите yG

Чтобы скопировать весь текст из текущего местоположения в конец текущего слова:

  • В командном режиме переместите курсор в место, откуда необходимо скопировать текст, и введите yw

Чтобы скопировать весь текст из текущего местоположения в конец строки:

  • В командном режиме переместите курсор в место, откуда необходимо скопировать текст, и введите y$

Вставить (PUT)

Чтобы вставить текст в буфер обмена - после расположения курсора:

  • В командном режиме введите p

Чтобы вставить текст в буфер обмена - до расположения курсора:

  • В командном режиме введите P
slayernoah
источник
1

У меня была проблема, потому что моя установка Vim не поддерживала буфер обмена :

vim --version | grep clip
-clipboard       +insert_expand   +path_extra      +user_commands
+emacs_tags      -mouseshape      +startuptime     -xterm_clipboard

Я установил vim-gnome (который поддерживает буфер обмена), а затем снова проверил:

vim --version | grep clipboard
+clipboard       +insert_expand   +path_extra      +user_commands
+emacs_tags      +mouseshape      +startuptime     +xterm_clipboard

Теперь я могу копировать и вставлять, используя "+ y и" + p соответственно.

Ашутош Трипатия
источник
Это исправило мою проблему!
astrojuanlu
1

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

Он вставит содержимое буфера обмена вашей ОС, сохраняя пробелы и вкладки без добавления автоматического отступа. Это эквивалентно тому , что старый :set paste, i, ctrl+shift+V, esc, :set nopasteметод.

Вам даже не нужны функции +clipboardили +xterm_clipboardvim, установленные больше. Эта функция называется «вставка в скобках». Для получения дополнительной информации см. Https://stackoverflow.com/questions/2514445/turning-off-auto-indent-when-pasting-text-into-vim/56781763#56781763

wisbucky
источник
Это ответ, который я ищу. Поскольку Vim не используется по умолчанию в дистрибутивах GNU / Linux, его необходимо установить даже в Ubuntu. Кроме того, кнопки вверх-вниз Vi не работают в Ubuntu и не подсвечиваются.
свое настоящее имя
0

Если вы root : Ctrl+ Shift+V

Если вы не root, щелкните мышью по центру.

Эллиптический вид
источник
0

Я просто хотел отметить, что используя Vim через Git Bash в Windows, вы можете просто использовать pили щелкать мышью по центру, не находясь в режиме вставки. Используя Vim через PuTTY , вы можете просто щелкнуть правой кнопкой мыши. И выделение делает копирование.

Я заметил это, потому что попал сюда, не видя, что это SE для Ubuntu.

Другие полезные команды:

  • yy(количество строк) - янки (копия)
  • dd(количество строк) - удалить
  • p - вставить строку ниже текущей строки
  • Shift+ p- вставить строку над текущей строкой
  • u - отменить
  • r - повтори
  • i - режим вставки
  • v - визуальный режим
Тайлер Кристиан
источник
Это не работает для меня на Windows Git Bash. Какую консоль вы используете, Mintty или Windows CMD?
Висбуки
Я считаю, что это было мятным.
Тайлер Кристиан
0

Вы можете использовать Ctrl+ Shift+ Vдля вставки в терминальную версию vim, но для версии с графическим интерфейсом vim, например Neovim-Qt, вставка текста из системного буфера обмена с Ctrl+ Shift+ Vпросто не будет работать. Вы должны получить доступ к буферу обмена "+или "*в редакторе vim.

Добавление новой привязки клавиш .vimrcбудет просто командами копирования / вставки:

" paste from system clipboard, align indentation with surroundings
noremap <Leader>p "*]p:set nopaste<CR>
" copy a sentence into system clipboard
noremap <Leader>y "+y)
Yossarian42
источник