Как добавить список в файл в vim? - PullRequest
6 голосов
/ 23 января 2012

Я хочу добавить список строк в файл в 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 ]

7 голосов
/ 23 января 2012

Команда write может использоваться для добавления всего текущего буфера в файл:

:write >> append_file.txt

Вы можете ограничить его диапазоном строк в текущем буфере, если хотите.Например, это добавит строки с 1 по 8 к концу append_file.txt:

:1,8write >> append_file.txt
7 голосов
/ 23 января 2012

Попробуйте использовать readfile() + writefile().

Если вы используете Vim 7.3.150+, ( или , если вы абсолютно уверены, что указанный файл заканчивается на \n):

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
5 голосов
/ 13 апреля 2015

Vim 7.4.503 добавлена ​​поддержка для добавления в файл с 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 голосов
/ 23 января 2012

Это может быть полезно, но добавляет содержимое в текущий файл.

Создает массив, удаляющий \n из каждого поля.

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

И добавляет в конце текущий файл:

:call append( line('$'), lines )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...