如何在vimscript中保存所有缓冲区?
我正在如何在vimscript中保存所有缓冲区?,vim,Vim,我正在vimscript中编写一个函数,该函数需要保存从当前工作目录开始的所有已更改、列出的缓冲区。此操作需要在后台进行,如果可能,无需更改当前活动缓冲区或光标位置 function! SaveChangedBuffers() for buf in getbufinfo({'buflisted':1}) if but.changed && buf.name =~ getcwd() echo buf.name "
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
函数!SaveChangedBuffers()
对于getbufinfo中的buf({'buflisted':1})
如果but.changed&&buf.name=~getcwd()
回音buf.name
“write buf.name看起来我能够通过以下方式实现我的既定目标:
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
代表“写更改”):
我知道这不是您要求的,但是:wall
对您来说是否足够好?如果不行,我想您必须保存当前的缓冲区编号,请执行:bufdo
保存,然后恢复buffer@PeterRincker我已经看过了。:wall
保存所有文件,我只想将保存操作限制为在项目文件夹中。我随机打开各种文件,不想意外地更改和写入它们。:bufdo
可以工作,但我必须返回到原始缓冲区(如果打开了150个文件,这会很麻烦).也许我应该在脚本中记住我当前的缓冲区,然后在:bufdo
之后返回到它。。。
command! Wc execute SaveChangedBuffers()