Как очистить номер строки в Vim при копировании? - PullRequest
54 голосов
/ 20 апреля 2011

Я копирую некоторый код из одной части одного файла в другую часть в vim. Я обнаружил, что в каждой строке есть номера строк и формат исчез, как установить правильный формат в качестве источника?

как это:

            40         root /opt/release/current/public;
 67             41         passenger_enabled on;
 68              42 

Ответы [ 10 ]

79 голосов
/ 20 апреля 2011

Если у вас есть номера строк, я вполне уверен, что вы не используете операции yim / put Vim (они никогда не копируют числа белья, столбцы сгиба, значки и т. Д.), Поскольку с точки зрения буфера редактированияони не существуют.

Я предполагаю, что вы работаете в эмуляторе терминала и используете мышь для копирования содержимого в буфер обмена, который, возможно, выбирает «постороннюю» комнату экрана (включая виртуальные пространства наконец, номера строк, маркеры сгиба и т. д.)

Возможно, вам повезет, установив

:se mouse+=a

, чтобы получить поведение мыши, как вы ожидаете.В противном случае, сделайте выбор с помощью V <movement>... y (y для yank, что соответствует 'copy')

Затем по назначению используйте p (поставить перед курсором) или P (поставить перед курсором)

Дайте мне знать, если это помогло, или вам нужна дополнительная информация

33 голосов
/ 22 апреля 2011

В обычном режиме введите :se nonu

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

21 голосов
/ 25 февраля 2015

В случае, если кому-то нужен более быстрый путь (в любом случае, в Linux), я заметил, что в vim вы можете удерживать Ctrl и перетаскивать область, которую хотите скопировать, и вы избегаете номеров строк и выбираете нужную часть.

Steps

  1. Ctrl и перетащите на область
  2. релиз ctrl
  3. копия (либо сочетание клавиш, либо щелчок правой кнопкой мыши)
11 голосов
/ 02 июня 2016

Постоянным решением для этого является добавление приведенного ниже кода в конец файла .vimrc, расположенного в вашем домашнем каталоге.

se mouse+=a

Добавив это, вы сможете выбрать только текст, а не номера строк, как показано на рисунке ниже:

enter image description here


Если вы не получаете файл .vimrc в своем домашнем каталоге (я столкнулся с этой проблемой), введите команду :scriptnames в редакторе vi, она покажет местоположение вашего .vimrc файла. Ссылка

5 голосов
/ 24 апреля 2011

Все ранее введенные решения очень хороши.Однако иногда вы используете vim на удаленном сервере (поэтому вы не можете скопировать в буфер обмена, используя "+y).Часто терминалы поддерживают операцию копирования-вставки.

Я использую vim для вывода визуального выделения в новую оболочку, где я могу копировать текст с помощью функции терминала:

:'<,'>w ! bash -c cat

Затем я могу легко скопировать вывод.

То жешаблон для вставки в vim:

:r ! bash -c cat

Затем я вставляю и отправляю EOF в cat, используя Ctrl + d .Этот метод также позволяет избежать повторной вставки вставляемого текста (Примечание: вы можете отключить автоматический отступ, используя :set pi!).

4 голосов
/ 20 апреля 2011

Посмотрите на опцию pastetoggle, иногда установленную на F11.

В качестве альтернативы вы всегда можете написать раздел, который хотите скопировать, во временный файл (ma, перейдите в конец строки, затем используйте :'a,.w tempfile), затем прочитайте его во второй файл.

Для дальнейшего изучения вам может понадобиться опция автоиндентирования.

1 голос
/ 24 октября 2013

В Windows VIM GUI: :set nu, а затем, удерживая нажатой Ctrl - Shift , выделите нужный текст с помощью мыши.Это возвращает номера строк в буфер.

0 голосов
/ 13 июня 2019

На Mac: я обнаружил, что вы можете выбрать нужную область с помощью Option + Command и скопировать ее в другой редактор.

0 голосов
/ 15 ноября 2018

Вы также можете использовать sed и pbcopy для копирования строк в буфер обмена, где вы можете вставить их в другой терминал или приложения вне vim.

sed -n <line start #>,<line end #>p <file name> | pbcopy

0 голосов
/ 30 мая 2012

Я сопоставил приведенную ниже команду с клавишей.
Он удаляет пробелы вокруг скопированных номеров строк.
Он игнорирует текст строки и любые пустые строки позади.

:1,$s/^\s*[0-9]\+\s//\|1,$s/^\s*[0-9]\+\n/\r/<cr>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...