我想用
vim将我文件的一部分写入另一个文件.例如,我有以下文件:
This is line 1
and this is the next line
line 1
and this is
我知道如何使用vi将一系列行写入文件:
:20,22 w partial.txt
另一种方法是直观地选择所需的文本然后写:
:'<'> w partial.txt
我有两种(非常相似的)方法.使用内置的write命令无法做到这一点,但是生成你自己的函数相当容易,你应该做你想做的事情(你可以随意调用它 – 如果你想要的话甚至是W).
command! -nargs=1 -complete=file -range WriteLinePart <line1>,<line2>call WriteLinePart(<f-args>) function! WriteLinePart(filename) range " Get the start and end of the ranges let RangeStart = getpos("'<") let RangeEnd = getpos("'>") " Result is [bufnum,lnum,col,off] " Check both the start and end are on the same line if RangeStart[1] == RangeEnd[1] " Get the whole line let WholeLine = getline(RangeStart[1]) " Extract the relevant part and put it in a list let PartLine = [WholeLine[RangeStart[2]-1:RangeEnd[2]-1]] " Write to the requested file call writefile(PartLine,a:filename) endif endfunction
这称为:’<,'> WriteLinePart test.txt.
如果你想支持多个行范围,你可以扩展它以包含不同的条件,或者你可以将我的答案中的代码捏到this question.摆脱关于替换反斜杠的一点,然后你可以有一个非常简单的函数做像(未经测试的……)这样的东西:
command! -nargs=1 -complete=file -range WriteLinePart <line1>,<line2>call writelines([GetVisualRange()],a:filename)