Как сохранить текстовый блок в визуальном режиме в файл в Vim? - PullRequest
67 голосов
/ 29 апреля 2009

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

START BLOCK1
something
END BLOCK1

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

Ответы [ 7 ]

123 голосов
/ 29 апреля 2009

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

:w new.txt

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

:'<,'>

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

:'<,'>w new.txt

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

16 голосов
/ 29 апреля 2009

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

5 голосов
/ 29 апреля 2009

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

2 голосов
/ 10 января 2014

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

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

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

Это та же реализация, что и @rmeador.

1 голос
/ 16 августа 2014

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

vmap <C-c> y:new ~/.vimbuf<CR>VGp:x<CR>:!pbcopy < ~/.vimbuf<CR><CR>
0 голосов
/ 14 декабря 2018

Vim получить визуальный выбор и сохранить в файл:

function! Get_visual_selection()
    #Get the position of left start visual selection
    let [line_start, column_start] = getpos("'<")[1:2]
    #Get the position of right end visual selection
    let [line_end, column_end] = getpos("'>")[1:2]
    #gotta catch them all.
    let lines = getline(line_start, line_end)
    if len(lines) == 0
        return ''
    endif
    #edge cases and cleanup.
    let lines[-1] = lines[-1][: column_end - 2]
    let lines[0] = lines[0][column_start - 1:]
    return join(lines, "\n")
endfunction

function Save_visually_selected_text_to_file()
    let selected_text = Get_visual_selection()
    call writefile(split(selected_text, "\n"), "/tmp/something.txt")
endfunction

#the c-u does a union of all lines in visual selection.
#this goes in the vimrc
vnoremap <F10> :<c-u>call Save_visually_selected_text_to_file()<cr>
0 голосов
/ 12 мая 2018

Опираясь на вариант @ chenkaie, у меня хорошо работает:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...