Vim:覆盖主机文件的保存功能为sudo

时间:2014-08-02 23:29:15

标签: vim hosts-file

我在.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魔法?

1 个答案:

答案 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}}