Как сохранить текстовый блок в визуальном режиме в файл в Vim?


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

START BLOCK1
something
END BLOCK1

START BLOCK2
something
somenthing...
END BLOCK2
  1. выбрать BLOCK1 в визуальном режиме
  2. я дергаю его, нажимая y
  3. как я могу спасти дернул BLOCK1 в какой-то другой файл?
6 66

6 ответов:

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

:w new.txt

это то, что вы печатаете, но вы не будете на самом деле посмотреть именно то, что выше. При нажатии кнопки :, вы перейдете в командную строку, которая автоматически будет заполнена информацией о выборе. Это будет выглядеть примерно так:

:'<,'>

просто продолжайте печатать остальные (w new.txt) для получения

:'<,'>w new.txt

...и нажмите enter.

с выбранным блоком, вы можете :'<,'>w other-file, который будет записывать только выбранный блок в other-file. Удар : в визуальном режиме должны поместить '<,'> в командной строке для вас уже, так что вам действительно нужно только ввести :w other-file.

вероятно, есть более простой способ сделать это, но то, что я бы сделал, это создать новый буфер (или вкладку), а затем вставить его в p. Вы можете создать новый буфер с :new или новая вкладка с :tabnew. Вы можете записать буфер / вкладку в файл как обычно с помощью :w filename.

как @dronus упоминается в комментариях,:w !pbcopy предложения не копируются правильно, потому что он копирует всю строку. Если я хочу скопировать только url-адрес в строке, я не смогу. Вот строка, которую вы можете добавить в свой .vimrc файл так, что каждый раз, когда вы нажмете CTRL-C, выбранная строка в вашем vim будет скопирована в буфер обмена:

map <C-c> y:e ~/clipsongzboard<CR>P:w !pbcopy<CR><CR>:bdelete!<CR>

Если вы хотите читать подробности о том, что это делает, вы можете прочитать об этом на мой блог

его такая же реализация, как и то, что предложил @rmeador.

подобно решению @songz, я предпочитаю делать это так, используя ": new"

vmap <C-c> y:new ~/.vimbuf<CR>VGp:x<CR>:!pbcopy < ~/.vimbuf<CR><CR>

основываясь на варианте @chenkaie, хорошо работает для меня:

let mapleader = "," let g:mapleader = "," vmap <leader>y y:new ~/.vbuf<CR>VGp:x<CR> nmap <leader>p :r ~/.vbuf<CR>