2012-01-22 114 views
6

我想一個字符串列表追加到一個文件中VimL 這裏是我的解決辦法代碼:如何將一個列表追加到vim中的文件中?

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

任何方式追加直接在vim文件? 應該有,但我無法找到任何

回答

7

使用readfile() + writefile()嘗試。

如果你(如果你是絕對的把握有問題的文件與\n結束)使用Vim的7.3.150+,:

function AppendToFile(file, lines) 
    call writefile(readfile(a:file)+a:lines, a:file) 
endfunction 

對於Vim的年齡超過 7.3.150:

" 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 
+0

我對你最後一句話感到困惑。 ':h readfile()'表示沒有'b',「最後一行是否在NL中結束並不重要」。 (VIM 7.4.26) –

+1

@ JustinM.Keyes更新至7.2.446版本(提交http://code.google.com/p/vim/source/detail?r=9577a28005e10fab0a0cada6c41b96c9a3e1bfe9)。請注意,該文件必須完全不包含換行符才能查看該錯誤('readfile()'返回的空列表)。另外請注意,它可能不是最後一個帶有bug的版本。 – ZyX

+1

@ JustinM.Keyes它已在版本7.3.150(2011年4月1日)中修復。 AFAIR在寫這篇文章時,我剛剛使用過'readfile()',VAM和7.2 *版本的經驗,而且沒有重新檢查就很穩定。這是2010年7月4日,當我修改VAM時總是使用'readfile(,'b')',當時的最新版本是7.2.445(除了vim73分支的變化)。我絕對使用Gentoo(穩定版或'〜arch'),這意味着我或多或少有些過時的版本。雖然bug直到7.3.150,但並不重要。 – ZyX

3

這可能是有用的,但它的內容追加到當前文件。

創建一個數組從每個場中除去\n

:let lines = ["line1", "line2", "line3"] 

並追加在結束當前文件:

:call append(line('$'), lines) 
+0

點上,如果在正確地理解問題 – sehe

6

write命令可用於整個當前緩衝區附加到文件:

:write >> append_file.txt 

您可以限制它如果需要,可以在當前緩衝區中的行範圍內。例如,這將附加行1至8的append_file.txt端:

:1,8write >> append_file.txt 
+0

這是做事情的一個更好的和更簡單的方法。 – theCuriousOne

4

Vim的7.4.503 added support使用"a"標誌追加到一個文件writefile

: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") 
相關問題