Як я вибираю весь текст у 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.