Як я вибираю весь текст у Vi / Vim?


193

Використання інструменту VI для редагування конфігураційних файлів.

Як я можу виділити весь текст у файлі (близько 1000 рядків), скопіювати його та вставити у Документи Google?

Відповіді:


158

Найпростіший і найшвидший спосіб - це використовувати: : % y +а потім перейти до Документів Google (або куди завгодно) та вставити. Пояснення:

  • % для позначення наступної команди для роботи над усіма рядками
  • y  витягти ці рядки
  • +  скопіювати в буфер обміну системи

Ще один спосіб, g g " + y Gале ви, швидше за все, визнаєте, що вище і швидше.


10
@Tuxmentat, будь ласка, поясніть, що робить кожен ключ:%y+
Jas

10
Ця відповідь буде краще, якби вона пояснила, що робить кожен ключ для обох послідовностей.
AsksAnyway

6
Моя найкраща здогадка: ':' означає, що ми використовуємо команду "колишній режим" (я думаю). Так чи інакше, це команда. '%' - це спеціальний специфікатор діапазону командного рядка, який вказує весь файл. 'y' пов'язує все, а '+' визначає регістр буфера обміну . : help <command> допомогло мені це зрозуміти.
Хокі Паркер

11
я повинен робити щось не так. я :%y+E488: Trailing characters
набираю

25
Я отримую "E850: Недійсне ім'я регістра". Другий метод добре працював для копіювання, але не потрапляє до системного буфера обміну на Ubuntu 16.04 (для мене, принаймні, --- у мене є .vimrc, який може впливати на речі).
EntangledLoops

95

Багато відповідей також відбирають вибір, який я не шукав.

Я використовую 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, але він не працює.


1
Вставити у веб-браузер cat file- це шлях. shift vМетод копіює тільки на внутрішній буфер Vi ст.
Олександр Левчук

не якщо ви використовуєте системний буфер обміну, який використовує реєстр *, але це працює лише на X, і я чув, що на Windows - тож якщо вам потрібен ssh -X - щоб перевірити, чи підтримує vim підтримку цього в vim -: встановіть буфер обміну + = без назви

Чи є альтернатива зробити це без створення нового файлу. Якщо ми редагуємо прямо на сервері, нам потрібно зберегти резервний код на локальній машині, щоб ми могли повернути назад.
NJInamdar

+1 для кота та виберіть у шпаклівці. Звичайно, не працюватимуть для величезних файлів і не є найбільш зручним для користувача методом. Але для копіювання невеликих файлів сценаріїв, які виходять за межі вікна перегляду екрана, досить добре.
Арніс Юрага

16

ВИКОРИСТИТИ ggVG. введіть "gg", щоб перейти до початку тесту. Потім введіть VG.


7

gg"+yG

або

gg"*yG

залежно від того, + або * є буфер обміну системи. (У багатьох Unixes + - буфер вибору миші для клацання середньою мишкою, а * - буфер обміну системи).


1
Я думаю, що навпаки: "* це вибір і" + - буфер обміну. vimdoc.sourceforge.net/htmldoc/gui_x11.html#x11-selection
Мікель

Ти правий. Я теж це знав, але неправильно набрав. ☹
frabjous

7

Я використовую Vim 7.4 в середовищі CentOS-7. Що працювало на мене для вибору всього тексту

:%y

Потім просто pв наступному файлі, де я хочу повну копію.

Або

Ви можете використовувати команду cat.

cat copyfile > pastefile

У цього git repo є і деякі інші корисні команди.


3

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

cat file.txt | pbcopy

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

Ви також можете вставити вміст буфера обміну у файл, використовуючи pbpaste:

pbpaste > file.txt

Хоча це спеціально не стосується vi, він досягає тієї самої мети на Mac.


1

Якщо ви використовуєте робочий стіл Linux, ви можете завантажити його в буфер обміну за допомогою xclip або xsel. Для чогось такого розміру ви можете просто скористатися функцією завантаження в документах google.


1

Іншим способом було б:

Ви натискаєте vклавішу на клавіатурі та повертаєте VIM на VISUAL

Потім виберіть увесь текст, прокручуючи вниз

^+ INSERTскопіювати

SHIFT+ INSERTвставте текст куди завгодно у Документи Google.



0

Дивіться на веб-сайті http://vim.wikia.com/wiki/Accessing_the_system_clipboard параметри того, як це зробити. (якщо компільовано в "*, слід посилатися на буфер обміну системи). Там також є інструкції щодо використання xsel з vim.


"* - це те, що було вибрано і" + - те, що було скопійовано. vimdoc.sourceforge.net/htmldoc/gui_x11.html#x11-selection
Мікель

0

Використовуйте наступну команду.

cat <your file name>

Це буде перегукуватися з вмістом файлу. Тепер виберіть, прокрутіть, скопіюйте, вставте.
Кінець гри

Наприклад:

cat bobis.txt
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.