Vim:Sudo编辑破坏了Apache语法高亮。

5

Sudo Edit(sudo -e)允许非特权用户安全地编辑文件。为此,它会创建一个临时副本进行编辑,编辑完成后再将其复制回来。

当我编辑apache文件时(例如,/etc/apache2/sites-enabled/mysite.com),sudoedit vim无法确定它应该使用Apache语法高亮,因此我必须手动执行:set syntax=apache。我怀疑Vim的语法高亮规则依赖于文件的完整路径,而由于sudoedit将文件更改为类似于/var/tmp/mysiteRANDOMCHARS.com的内容,因此会丢失该路径信息。

是否有任何方法可以自动告诉Vim应该使用Apache语法高亮呢?

谢谢!

3个回答

3
这似乎是 vi 模型行特性的罕见用例之一:
在您的 .vimrc 文件中:
set modeline

在 Apache 配置文件中,在顶部或底部的某个位置:

# vi: syntax=apache

1
我喜欢这个,但我担心打开模型行的安全隐患。 - Sam King
好观点。迄今为止,我对modeline功能的唯一经验是从阅读有关它的内容中获取的。那么,https://github.com/ciaranm/securemodelines 呢? - innaM
嗯...源代码中没有注释。在我对其进行阅读之前,我需要先了解它。但我猜它会起作用的。 - Sam King

2
请参见/usr/share/vim/vim7x/filetype.vim,了解Vim如何确定文件为apache文件。
在我的配置中,使用$ vim$ sudo -e没有任何区别,因为.com扩展名被视为dcl
除了在~/.vimrc中重写.com的自动命令之外,我看不到任何明智和可靠的解决方法。
au BufNewFile,BufRead *.com set ft=apache

0
几年后看到这篇文章,但这对我很有用:
我使用-E而不是编辑的-e,它会保留环境变量并且就像正常启动vim一样运行。
然而,这可能不是最好的方法,因为我们失去了“复制文件和编辑->替换”的功能,这是sudo -e/sudoedit提供的。
但是,对于我的用例来说,它可以正常工作。
提示:
# in your shell .rc
export EDITOR=vim
alias sudoe="sudo -E $EDITOR $@"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接