繁体   English   中英

如何在可视模式下将文本块保存到Vim中的文件?

[英]How can I save a text block in visual mode to a file in Vim?

标题非常具有描述性。 以防万一,我举一个例子:

START BLOCK1
something
END BLOCK1

START BLOCK2
something
somenthing...
END BLOCK2
  1. 我在可视模式下选择了BLOCK1
  2. 我按y
  3. 如何将BLOCK1保存到其他文件?

选择要保存的文本,以线条图或块图模式显示,然后

:w new.txt

这就是您输入的内容,但实际上看不到上面的内容。 当您按: ,您将转到命令行,该命令行将自动填充选择信息。 它看起来像这样:

:'<,'>

只需继续输入其余内容( w new.txt )即可

:'<,'>w new.txt

...然后按Enter。

选中块后,您可以:'<,'>w other-file ,这只会将所选的块写入other-file 击中:在可视模式下,应该已经为命令行输入了'<,'> ,因此您实际上只需要键入:w other-file

可能有一种更简单的方法,但是我要做的是创建一个新的缓冲区(或制表符),然后将其粘贴到p 您可以使用:new创建新的缓冲区,也可以使用:tabnew创建新的:tabnew 您可以使用:w filename将缓冲区/制表符正常写入: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>yy:new ~/.vbuf<CR>VGp:x<CR> nmap <leader>p :r ~/.vbuf<CR>

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>

除了上面选择的答案之外,

  • 当使用鼠标选择(1)时,

  • 以及只想部分复制行时仅复制@dronus注释中提到的整行的问题(2):

(1)在基于Debian的DietPi(Raspberry PI)系统上,当在我的Ubuntu 16.04工作站上使用鼠标进入并选择“ VISUAL MODE”时,vim的行为与上述首选解决方案有些不同。 然后

  • y拉动它

但是如果我输入':'作为命令,它将不会显示

'<,'>

在这里我可以简单地添加我的

w new.txt

之后。 因此,我自己输入了它,它确实起作用了:

'<,'>w new.txt

并将整行提取的内容复制到我的文件“ new.txt”中,而“ <”似乎意味着“复制选定的行,然后将“>”重定向到写入命令的引用文件。

(2)对于不粘贴部分行的问题(如提到的@dronus 注释中的问题), 解决方案(选择的一个,第一个替代方案)对我有效:

编辑第一个文件,按所需文本。 然后从vi(:e / path / to / other / file)中打开第二个文件并粘贴(通过键入p)。 保存它(如“:w new.txt”上方。

然后,它将只复制用鼠标或“ y”标记的行的一部分。

[编辑]在我的Ubuntu系统上:有时用鼠标选择不会在vim中输入'VISUAL MODE'。 然后可以使用上下文菜单选择正常的复制/粘贴...我还没有找到Ubuntu将其行为从“客户端行为”更改为“主机”的原因(withUbuntu将ssh bash窗口托管到我的“客户')...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM