Как сохранить все буферы в vimscript? - PullRequest
0 голосов
/ 18 мая 2018

Я пишу функцию в vimscript, которая должна сохранять все измененные перечисленные буферы, которые начинаются с текущего рабочего каталога.Эта операция должна выполняться в фоновом режиме, без изменения текущего активного буфера или позиции курсора, если это возможно.

function! SaveChangedBuffers()
    for buf in getbufinfo({'buflisted':1})
        if but.changed && buf.name =~ getcwd() 
           echo buf.name
           "write buf.name <-- how to do this correctly?
        endif
    endfor
endfunction

Мне не удалось найти функцию в vimscript, которая действительно сохраняет буфер.Я знаю, что могу указать имя файла для :write или использовать несколько других опций.Но я хочу убедиться, что на самом деле я пишу все буферы "vim native", чтобы не перезаписывать и не прерывать какие-либо другие операции или файлы.

Что такое "vim native" способ записисписок буферов на диск от vimscript?

1 Ответ

0 голосов
/ 19 мая 2018

Похоже, я смог достичь поставленной цели с помощью следующего:

function! SaveChangedBuffers()
    set lazyredraw
    let cur_buffer = bufnr('%')
    for buf in getbufinfo({'buflisted':1})
        if buf.changed && buf.name =~ getcwd() 
           execute 'buffer' . buf.bufnr
           update
           " echo buf.name
        endif
    endfor
    execute 'buffer' . cur_buffer
    set nolazyredraw
endfunction

lazyredraw отключает изменения экрана во время работы скрипта.На медленных терминальных соединениях это может даже не понадобиться.Затем я запоминаю текущий буфер с bufnr('%') и восстанавливаю его в конце скрипта из переменной.

Цикл просто изменяется на каждый буфер, который соответствует критериям и выполняет :update (который также может быть :write, потому что я знаю, что мой буфер был изменен).

И для завершения полного опыта vim можно сопоставить его с командой Ex (Wc означает «запись изменена»):

command! Wc execute SaveChangedBuffers()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...