Найти в Дзене
Блокнот математика

Рубрика "Секреты Вим". Из Вим в системный буфер

Привет, коллеги. Частенько бывает нужно текст из Вим выделить и скопировать в системный буфер обмена. Чтобы потом вставить в текстовый редактор, в браузер или ещё куда-то. Иногда текст сначала вставляется в Вим, там редактируется, а потом отправляется куда-то ещё. Ведь в Вим удобно слить строки, удалить лишние пробелы, вставить спецсимволы и многое другое. Скопировать текст из консоли, как правило, можно. Обычно для этого надо нажать shift и выделить текст мышкой. Если у вас графическая версия, gvim, то там это вообще как у всех. Но там есть еще и специальные регистры Вим, связанные с системным буфером, это + и *, и можно скопировать или вырезать туда текст средствами Вим. Что нам нужно для более комфортного переноса текста? Прежде всего, надо включить сворачивание строк, иначе текст уйдет за край экрана. Это флаг wrap, включается он :set wrap, отключается :set nowrap, и можно переключать :set wrap!. Можно и запросить статус: :set wrap? Не забудьте это сделать, а то получите только на

Привет, коллеги. Частенько бывает нужно текст из Вим выделить и скопировать в системный буфер обмена. Чтобы потом вставить в текстовый редактор, в браузер или ещё куда-то. Иногда текст сначала вставляется в Вим, там редактируется, а потом отправляется куда-то ещё. Ведь в Вим удобно слить строки, удалить лишние пробелы, вставить спецсимволы и многое другое.

Скопировать текст из консоли, как правило, можно. Обычно для этого надо нажать shift и выделить текст мышкой. Если у вас графическая версия, gvim, то там это вообще как у всех. Но там есть еще и специальные регистры Вим, связанные с системным буфером, это + и *, и можно скопировать или вырезать туда текст средствами Вим.

Что нам нужно для более комфортного переноса текста?

Снизу вверх: всё включено, обнулили foldcolumn, выставили nunumber, выставили nolinebreak. Теперь можно копировать в системный буфер!
Снизу вверх: всё включено, обнулили foldcolumn, выставили nunumber, выставили nolinebreak. Теперь можно копировать в системный буфер!

Прежде всего, надо включить сворачивание строк, иначе текст уйдет за край экрана. Это флаг wrap, включается он :set wrap, отключается :set nowrap, и можно переключать :set wrap!. Можно и запросить статус: :set wrap?

Не забудьте это сделать, а то получите только начала строк.

Второй нюанс более тонкий. Уберите фолдинг и номера строк:
:set foldcolumn=0 nonumber.

Иначе это всё потянется за текстом в буфер.

Третий момент ещё более тонкий. Вим обычно переносит слова не жестко по краю, а деликатно. Например, по словам. Соответственно, у вас может быть несколько пробелов между последним словом на строке и первым словом на следующей. Просто для красоты, и их придется убирать потом.

Скиньте флаг linebreak (:set nolinebreak)

Если выставлен флаг breakindent, выравнивающий визуально перенесенную строку, скиньте и его.

Если у вас выставлена опция showbreak во что-то, то указанный символ будет помечать начало визуально перенесенной строки. Вам это тоже не надо при копировании, так что поместите в опцию пустую строку или просто сбросьте опцию на значение по умолчанию: :set showbreak&

Последнее. У вас могут быть отступы в тексте, что красиво и правильно, но при копировании оно вам не надо. До сих пор всё, что мы делали, текст по существу не меняло, только его отображение в окне. Теперь же мы уберем отступы:

:s/^\s*//

Команду эту надо дать на диапазоне строк, которые вы будете копировать, на одиночной строке или на выделении. Текст при этом изменится, но можно вернуть его к исходному виду отменой: u

В принципе, можно всё описанное упаковать в команду, оператор или привязку, и легко готовить строки к копированию. В зависимости от того, копируете вы чаще одну длинную строку или несколько строк, и надо ли вам сохранять отступы, это делается по-разному, поэтому я не буду навязывать своих решений. Я это делаю вручную по мере надобности, а опции просто помню.

Удачи, коллеги.

Научно-популярные каналы на Дзене: путеводитель
Новости популярной науки12 марта 2022