Как скопировать содержимое вставки в редактор 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. Надеюсь, это поможет.


Какой смысл: 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чтобы войти в режим вставки, щелкните правой кнопкой мыши в терминале, нажмите Вставить.


Я думал, что строчные 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

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


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


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)
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.