我想在VimL中将字符串列表附加到文件中 这是我的解决方法代码:
let lines = ["line1\n", "line2\n", "line3\n"]
call writefile(lines, "/tmp/tmpfile")
call system("cat /tmp/tmpfile >> file_to_append_to")
是否可以直接在vim中附加到文件? 应该有,但我找不到任何东西
答案 0 :(得分:7)
write
命令可用于将整个当前缓冲区附加到文件:
:write >> append_file.txt
如果需要,可以将其限制为当前缓冲区中的行范围。例如,这会将第1行到第8行附加到append_file.txt的末尾:
:1,8write >> append_file.txt
答案 1 :(得分:7)
尝试使用readfile()
+ writefile()
。
如果您使用的是Vim 7.3.150 +,(或,如果您完全确定相关文件以\n
结尾):
function AppendToFile(file, lines)
call writefile(readfile(a:file)+a:lines, a:file)
endfunction
对于早于 7.3.150的Vim :
" lines must be a list without trailing newlines.
function AppendToFile(file, lines)
call writefile(readfile(a:file, 'b')+a:lines, a:file, 'b')
endfunction
" Version working with file *possibly* containing trailing newline
function AppendToFile(file, lines)
let fcontents=readfile(a:file, 'b')
if !empty(fcontents) && empty(fcontents[-1])
call remove(fcontents, -1)
endif
call writefile(fcontents+a:lines, a:file, 'b')
endfunction
答案 2 :(得分:5)
Vim 7.4.503 added support,使用writefile
标记附加"a"
文件:
:call writefile(["foo"], "event.log", "a")
来自:h writefile
:
writefile({list}, {fname} [, {flags}])
Write |List| {list} to file {fname}. Each list item is
separated with a NL. Each list item must be a String or
Number.
When {flags} contains "a" then append mode is used, lines are
appended to the file:
:call writefile(["foo"], "event.log", "a")
:call writefile(["bar"], "event.log", "a")
答案 3 :(得分:3)
这可能很有用,但它会将内容附加到当前文件。
创建一个从每个字段中删除\n
的数组。
:let lines = ["line1", "line2", "line3"]
并在最后附加到当前文件:
:call append( line('$'), lines )