将所选文本附加或前置到Vim中的文件

gre*_*oul 19 vim backup save selection

在Vim中,有没有办法将所选文本移入<current_file>.bak,追加或前置?如果可能,不应显示备份文件.

我设想工作流程是:

  1. 选择一些文字
  2. 类型 :sbak
  3. 选择保存到 <current_file>.bak

kev*_*kev 31

您可以分三步完成:

  • 键入Shift-vj... j以选择一些行
  • :'<,'>w! >>file.bak用于保存选定行的类型file.bak(追加)
  • 键入gvd以删除原始行

Sbak如果您愿意,可以编写用户定义的命令:

com! -nargs=1 -range Sbak call MoveSelectedLinesToFile(<f-args>)
fun! MoveSelectedLinesToFile(filename)
    exec "'<,'>w! >>" . a:filename
    norm gvd
endfunc
Run Code Online (Sandbox Code Playgroud)

  • 像往常一样,你忘记了 `fnameescape()` `a:filename`。 (2认同)

Zso*_*kai 11

关于什么

  1. v
  2. 一些移动命令/甚至搜索选择文本
  3. :'<,'> w! >> /YOUR/SELECTIONFILE
  4. :'<,'>d

那是你要的吗?如果这样设置了map它,就像

map <F2> :'<,'> w! >> /YOUR/SELECTIONFILE<cr>:'<,'>d<cr>
Run Code Online (Sandbox Code Playgroud)

注意此追加到SELECTIONFILE,不仅是选择,而是整个线路.另外,阅读:h :w:h ++opt(在其中您可以了解编写文件的可能选项(例如),您可以附加到具有不同编码的文件,这真的会让事情变得混乱,所以不要这样做;-)


sha*_*ane 5

您可以使用以下命令将 vim标记选择的文本写入文件中。

例如,您转到第 30 行:20,然后标记它ma,然后转到第 30 行:30并标记它mb,然后将第 20 行到第 30 行复制到文件 filename.dat :'a,'b w filename.dat

:'a,'b w filename.dat将标记a到标记b的行写入文件 filename.dat

:'a,'b w! filename.dat将现有文件 filename.dat 替换为从标记a到标记b的行

:'a,'b w >> filename.dat将标记a到标记b的行追加到文件 filename.dat 中