如何将列表附加到vim中的文件?

时间:2012-01-22 22:59:22

标签: vim

我想在VimL中将字符串列表附加到文件中 这是我的解决方法代码:

let lines = ["line1\n", "line2\n", "line3\n"]
call writefile(lines, "/tmp/tmpfile")
call system("cat /tmp/tmpfile >> file_to_append_to")

是否可以直接在vim中附加到文件? 应该有,但我找不到任何东西

4 个答案:

答案 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 )