2009-04-28 2 views
60

Название очень описательное. На всякий случай, я приведу пример:Как сохранить текстовый блок в визуальном режиме в файл в Vim?

START BLOCK1 
something 
END BLOCK1 

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

ответ

117

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

:w new.txt 

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

:'<,'> 

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

:'<,'>w new.txt 

... и нажмите ввод.

+10

Это не дает ожидаемого результата, поскольку он только пишет полные строки, не считая начального и конечного положения выбора внутри строки. Любое решение для этого? В противном случае мне нравится снова задавать основной вопрос. – dronus

+1

@dronus - Я не совсем понимаю, о чем вы спрашиваете. Это делает то, что ОП задает, насколько мне известно, вопрос. – Rook

+3

Если вы выберете в любом нестрочном визуальном режиме, ': w' все равно выписывает полные строки, затронутые выбранным диапазоном, но не точный диапазон, начинающийся или заканчивающийся внутри строк. Например, если вы выберите узкий столбец в режиме выбора блока или часть одной строки в режиме визуального выбора, полная строка будет записана ': w', даже если' y' скопирует правильные части строки , – dronus

4

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

+1

Обязательно удалите лишнюю строку в верхней части !! (Вставка в пустой буфер создает дополнительную строку вверху или, если используется 'P', внизу.) –

16

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

+1

Vim всегда выбирает целые строки для подключения к внешней команде, поэтому вы можете использовать команду unix/cygwin 'cut' для выбора прямоугольника столбца N в M каждой строки в выборе: ': '<,'> w! cut -cN-M> new.txt'. Удивлен тот самый высокий голос, который проголосовали, и читатели, похоже, не понимают этого вопроса. – mosh

2

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

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

Если вы хотите, чтобы прочитать подробную информацию о том, что это о, вы можете прочитать об этом на my blog

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

1

Подобно @ Songz, решение которого, я предпочитаю делать это так, используя «: новый»

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

pbcopy, насколько мне известно, присутствует только на OSX. Существуют аналогичные программы для Linux и других систем, но они идут разными именами и работают по-разному. –

+0

Да, это работает, только если pbcopy исполняемый :) Так что никакого вреда вообще – chenkaie

 Смежные вопросы

  • Нет связанных вопросов^_^