gpt4 book ai didi

vim - 在vim中,如何将部分行写入文件?

转载 作者:行者123 更新时间:2023-12-04 04:08:44 25 4
gpt4 key购买 nike

我想使用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

但是,当使用这种方法时,vim坚持在输出中写满行,而我发现没有办法写不完整的行。有什么想法吗?

最佳答案

我有两种(非常相似)的方法。无法使用内置的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)

关于vim - 在vim中,如何将部分行写入文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1953056/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com