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

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

1
задан 16 February 2013 в 15:47

8 ответов

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

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

50
ответ дан 25 May 2018 в 01:26
  • 1
    Этого я до сих пор не знал. Кроме того, +1 для связывания еще одного удивительного учебника vim. – Attila O. 16 February 2013 в 14:37
  • 2
    Говоря о кривых обучения для редакторов, есть «классические кривые обучения для некоторых общих редакторов», blog.thilelli.net/public/store/attached/curves.jpg . – hlovdal 16 February 2013 в 21:02
  • 3
    В терминале GNOME короткие сокращения для копирования и вставки - это Ctrl-Shift-C и Ctrl-Shift-V, соответственно. – Flimm 23 February 2013 в 15:17
  • 4
    Я попытался нажать поочередно & lt; kbd & gt; & lt; / kbd & gt ;, & lt; kbd & gt; + & lt; / kbd & gt; и & lt; kbd & gt; p & lt; / kbd & gt ;, также & lt; kbd & gt; & lt; / kbd & gt; и & lt; kbd & gt; p & lt; / kbd & gt; и ничего не произошло. Что я сделал не так? Я использую vi не vim – user907860 13 December 2013 в 19:51
  • 5
    Я просто хотел добавить, что "+p не всегда работает в Ubuntu. – puk 25 February 2018 в 03:28
Если вы хотите скопировать содержимое вставки в один и тот же файл, используйте yank и paste. Если вы хотите скопировать содержимое вставки на терминалах, откройте первый файл, выдернув нужный текст, затем откройте второй файл в vim (например, :tabnew /path/to/second/file) и нажмите p, чтобы вставить его. Если вы хотите скопировать содержимое вставки из vim во внешнюю программу, вам необходимо получить доступ к системному буферу. Я предполагаю, что вы используете Ubuntu. В GUI-версии vim всегда есть поддержка буфера обмена, однако, если вы хотите использовать Vim с терминала, вам нужно будет проверить поддержку X11-буфера обмена. На консоли введите:
$ vim --version | grep xterm
Если вы найдете -xterm_clipboard, у вас есть два варианта: 1) Скомпилируйте vim самостоятельно, с флагом xterm_clipboard на 2) Удалите vim, установите gvim (vim-gtk или vim-gnome). Вы можете придерживаться non-gui vim, вызывая vim из терминала, так же, как и раньше. На этот раз, когда вы проверите, вы должны найти + xterm_clipborad. Теперь, когда вы выдергиваете какой-либо текст в регистре + в своем редакторе vim (например, «+ yy»), он также копируется в системный буфер обмена, который вы можете получить из своей внешней программы, например, редактора gedit, с помощью Ctrl + V. Если вы хотите скопировать содержимое вставки из внешней программы в vim, сначала скопируйте текст в системный буфер обмена с помощью Ctrl + C, затем в режиме вставки редактора vim, щелкните среднюю кнопку мыши (обычно колесо) или нажмите Ctrl + Shift + V, чтобы вставить Это 4 основные условия копирования и вставки, связанные с vim. Надеюсь, это поможет.
20
ответ дан 25 May 2018 в 01:26
  • 1
    В чем смысл: tabnew / path / to / second / file? Вы можете достичь той же самой вещи, которая дергается / копируется / вырезается в первом файле, открывая второй файл с помощью: vi / path / to / second / file и вставки (p / P) в нем. По крайней мере, в моем случае ... Или это потому, что у меня включена функция vim + xterm_clipboard? Или есть больше, чем табуляция? – Cbhihe 2 October 2014 в 22:39

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

(Это также причина, по которой я никогда не получаю ноутбук, на котором вы не можете нажать Сдвиг без нажатия вспомогательной клавиши)

12
ответ дан 25 May 2018 в 01:26
  • 1
    Vi / Vim! = terminal;) – 0xC0000022L 17 February 2013 в 23:01
  • 2
    хорошо, но все равно работает :) – Magnus Jonsson 17 February 2013 в 23:11
  • 3
    +1 для этого .. Что вы используете для выполнения say Ctrl+A, Ctrl+C также? – Arup Rakshit 29 December 2013 в 00:18
  • 4
    Если я использую терминал внутри DE, я обычно просто выбираю текст с помощью мыши и копирую с помощью Ctrl + Shift + C. – Magnus Jonsson 2 January 2014 в 20:38
  • 5
    Shift + Insert также работает в gvim. (Я запускаю Ubuntu 13.10, если это имеет значение.) – eksortso 20 January 2014 в 23:27

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

Полезно, если у вас нет доступа к системному буферу (например, в удаленном сеансе ssh)

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

10
ответ дан 25 May 2018 в 01:26

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

5
ответ дан 25 May 2018 в 01:26
  • 1
    Я думал, что это нижний регистр i. Что делает верхний регистр I? – Flimm 23 February 2013 в 15:16
  • 2
    @Flimm, о чем уже было сказано в комментарии Бен Мордекая в другом ответе. – sierrasdetandil 24 February 2013 в 01:42
  • 3
    Я отредактировал ответ на нижний регистр i. Верхний регистр I перемещает курсор в начало строки перед входом в режим вставки, который здесь не нужен. – Flimm 24 February 2013 в 02:04

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

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

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

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

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

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

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

Чтобы скопировать все строки из текущего местоположения в конец файла: [!d12 ] В командном режиме переместите курсор в первую строку, которую нужно скопировать, и введите yG

. Чтобы скопировать весь текст из текущего местоположения в конец текущего слова: [ ! d15] В командном режиме переместите курсор в первую строку, которую нужно скопировать, и введите yG

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

In t он переводит курсор в место, где текст нужно скопировать, и введите y$

Вставить (PUT)

Вставить текст в буфер обмена - Вставить (PUT) местоположение курсора:

В командном режиме переместите курсор в место, где текст нужно скопировать, и введите y$ [ ! d25]

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

В командном режиме введите P
3
ответ дан 25 May 2018 в 01:26

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

Если вы root : Центр щелкните мышью.

0
ответ дан 25 May 2018 в 01:26

Просто хотелось заметить, что с помощью vim через git-bash на окнах вы можете просто использовать p или щелчок по центру мыши, не находясь в режиме вставки. Используя vim через замазку, вы можете просто щелкнуть правой кнопкой мыши.

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

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

yy(# of lines ) - yank ( copy )
dd(# of lines ) - delete
p - paste line below current line
shift + p - paste line above current line
u - undo
r - redo
i - insert mode 
v - visual mode
0
ответ дан 25 May 2018 в 01:26

Другие вопросы по тегам:

Похожие вопросы: