我在.vimrc中有这个,这是一个在新标签页中打开我的主机文件的键映射:
nnoremap <Leader>hs :tabe /etc/hosts<cr>:set noreadonly<cr>
所以现在Vim不会因为readonly而烦恼,这很棒。但是,当我保存时,我可能会强制性地点击⌘ s 或:w
。我想覆盖两个(它们是否相同?)调用我们正常的NVW(令人讨厌的Vim方式)来写为sudo:
:w !sudo tee % >/dev/null<cr>
但我只想为当前缓冲区执行此操作,就像在hosts文件中一样。一些setlocal
魔法?
答案 0 :(得分:0)
我正在使用macvim,因为你正在使用命令。我不相信<D-S>
与:w
做同样的事情,但我肯定不知道。如果需要,您可以映射以使用缓冲区本地映射。
autocmd BufRead /etc/hosts nnoremap <buffer> <D-s> :w !sudo tee % >/dev/null<cr>
但您首先需要从菜单中取消映射。在你的gvimrc中使用类似的东西。
macmenu File.Save key=<nop>
并添加保存的默认行为。缓冲区本地映射优先。
nnoremap <D-s> :w<CR>
您可以使用Zyx's Answer on Aliasing a command in Vim中的技术覆盖:w
。如果:w
是唯一的在线内容,则会将:w !sudo tee % >/dev/null
替换为autocmd BufRead /etc/hosts cnoreabbrev <buffer> <expr> w ((getcmdtype() is# ':' && getcmdline() is# 'w')?('w !sudo tee % >/dev/null'):('w'))
。
{{1}}