Как выбрать весь текст в Vi / Vim?

193

Использование инструмента VI для редактирования конфигурационных файлов.

Как я могу выделить весь текст в файле (около 1000 строк), скопировать его, а затем вставить в Google Docs?

Тарун Гупта
источник

Ответы:

158

Самый простой и быстрый способ - использовать: : % y +затем перейти к Документам Google (или где-либо еще) и вставить. Объяснение:

  • % обратиться к следующей команде для работы на всех линиях
  • y  дергать эти строки
  • +  скопировать в системный буфер обмена

Другой способ, g g " + y Gно вы, вероятно, признаете, что все вышеперечисленное быстрее и проще.

Tuxmentat
источник
10
@Tuxmentat не могли бы вы объяснить, что делает каждый ключ:%y+
Jas
10
Этот ответ был бы лучше, если бы он объяснил, что каждый ключ делает для обеих последовательностей.
AsksAnyway
6
Мое лучшее предположение: ':' означает, что мы используем команду "ex mode" (я думаю). Во всяком случае, это команда. «%» - это специальный спецификатор диапазона командной строки, который определяет весь файл. 'y' сносит все, а '+' указывает регистр буфера обмена . : help <команда> помогла мне понять это.
Ястребиный Паркер
11
Должно быть, я что-то делаю не так. я :%y+E488: Trailing characters
печатаю
24
Я получаю «E850: Неверное имя регистра». Второй метод работал хорошо для копирования, но не попадает в системный буфер обмена в Ubuntu 16.04 (по крайней мере для меня - у меня есть .vimrc, который может влиять на вещи).
EntangledLoops
93

Многие из приведенных ответов также дергают выбор, который я не искал.

Я использую ggVGдля этой цели (должен быть запущен в обычном режиме). Эта команда выделяет только весь текст внутри документа.

Я даже переназначил Ctrl+Aдля этой цели, так как мне не нужно увеличивать целое число с помощью ярлыка ( Ctrl+Aкарта по умолчанию ).

Просто добавьте это в свой .vimrc:

map <C-a> <esc>ggVG<CR>

Он имеет <esc>первый, чтобы убедиться , что пользователь находится в нормальном режиме.

Арда
источник
2
Именно то, что я искал, и приятно видеть, что Ctrl + A не занят в vim по умолчанию. Надеюсь, что нет никаких побочных эффектов.
Никос Александрис
2
Я лично использую ggVG, но gg0vG$может быть более подходящим, поскольку он более точно повторяет «нормальную» операцию Ctrl + A.
Шехарьяр
39

Вы можете использовать, cat fileа затем выбрать выход, скопировать и вставить, если вам нужно вставить его в браузер.

Для vi это то, как вы можете выделить весь текст и записать его в новый файл:

shift v  -- visual mode
shift g -- jump to eof
"*y -- yank select text
:e my_new_file -- create a new file
"*p -- paste into a new file

Теоретически это должно работать как на Linux, так и на Windows - я пробовал это на Mac, но это не работает.

silviud
источник
1
Вставить в веб-браузер cat fileэто путь. shift vМетод копирует только на внутренний буфер Vi в.
Александр Левчук
не, если вы используете системный буфер обмена, который использует * реестр - но это работает только на X, и я слышал об windows - так что если вы ssh, вам нужен ключ -X, чтобы проверить, поддерживает ли vim это в vim -: set clipboard + = без имени
Есть ли альтернатива сделать это без создания нового файла. Если мы редактируем в режиме реального времени на сервере, нам нужно сохранить резервный код на локальном компьютере, чтобы мы могли вернуться назад.
NJInamdar
+1 для кошки и выберите в замазке. Конечно, не будет работать с огромными файлами и это не самый удобный метод. Но для копирования небольших файлов сценариев, выходящих за пределы области просмотра экрана, достаточно.
Арнис Юрага
15

ИСПОЛЬЗОВАТЬ ggVG. введите "gg", чтобы перейти к началу теста. Затем введите VG.

user402791
источник
7

gg"+yG

или же

gg"*yG

в зависимости от того, + или * системный буфер обмена. (На многих юниксах + - это буфер выбора мыши для щелчка средней кнопкой мыши, а * - системный буфер обмена).

радостный
источник
1
Я думаю, что все наоборот: "* это выделение, а" + это буфер обмена. vimdoc.sourceforge.net/htmldoc/gui_x11.html#x11-selection
Микель
Вы правы. Я тоже это знал, но набрал не то. Fra
frabjous
7

Я использую Vim 7.4 в среде CentOS-7. Который работал мне для выбора всего текста

:%y

Тогда просто pв следующем файле, где я хочу полную копию.

Или же

Вы можете использовать команду cat.

cat copyfile > pastefile

В этом git-репо есть и другие полезные команды.

Sachith
источник
3

Для Mac используйте pbcopy (копия из картона):

cat file.txt | pbcopy

Содержимое файла file.txt теперь находится в буфере обмена для вставки в другое приложение (например, браузер).

Вы также можете вставить содержимое буфера обмена в файл, используя pbpaste:

pbpaste > file.txt

Хотя это и не относится к vi, оно все же достигает той же цели на Mac.

Крис
источник
1

Если вы используете рабочий стол Linux, вы можете загрузить его в буфер обмена, используя xclip или xsel. Для чего-то такого размера вы можете просто использовать функцию загрузки в Google Docs.

Cakemox
источник
1

Другой способ будет:

Вы нажимаете vклавишу на клавиатуре и превращаете VIM в VISUAL

Затем выделите весь текст, прокрутив вниз

^+ INSERTскопировать

SHIFT+ INSERTвставить текст в Google Docs, куда вы хотите.

user237678
источник
0

См. Http://vim.wikia.com/wiki/Accessing_the_system_clipboard, чтобы узнать, как это сделать. (если скомпилировано в "*, то должно ссылаться на системный буфер обмена). Там также есть инструкции, как использовать xsel с vim.

kasterma
источник
"* - это то, что было выбрано, а" + - это то, что было скопировано. vimdoc.sourceforge.net/htmldoc/gui_x11.html#x11-selection
Микель
0

Используйте следующую команду.

cat <your file name>

Это будет отображать содержимое файла. Теперь выберите, прокрутите, скопируйте, вставьте.
Игра закончена

Напр .:

cat bobis.txt
user359247
источник