以下是我用于编辑 root 拥有的文件的个人别名:
# CLI superuser nano; compiled; version 2.8.0
function sunano {
export SUDO_EDITOR='/usr/local/bin/nano'
sudoedit "$@"
}
# GUI superuser xed; packaged; version 1.2.2
function suxed {
export SUDO_EDITOR='/usr/bin/xed'
sudoedit "$@"
}
# GUI superuser sublime-text; packaged; version 3126
function susubl {
export SUDO_EDITOR='/opt/sublime_text/sublime_text -w'
sudoedit "$@"
}
让我从最后开始说:
Sublime Text 现在工作得很好,这要归功于斯蒂芬·基特的建议。
Xed似乎也很好用,它表明权限被提升了,我个人不喜欢被提醒,但它似乎没有问题,颜色就在那里,甚至不需要一些等待像 Sublime 一样切换。
我遇到的问题是 Nano:
如果我像以前那样调用它,例如:
sudo nano /etc/nanorc
颜色就在那里。
但如果我用新的别名来调用它:
sunano /etc/nanorc
没有任何颜色。
不过配置似乎已被读取,因为它看起来与我配置的相同。
编辑1:显然这个问题至少影响配置文件:
-rw-r--r-- 1 root root 8.6K Apr 8 02:30 /etc/nanorc
其他文件,例如 Bash 或 C++ 是彩色的,我很困惑。
答案1
这里的问题是,sudoedit
在编辑器中打开文件之前,会将文件复制到临时文件中。当文件具有扩展名时,将使用相同的扩展名创建临时文件,并适当地选择基于文件名的语法突出显示模式(例如对于 C 文件)。当文件没有扩展名时(如 的情况)nanorc
,它会使用随机扩展名创建;这会混淆基于文件名的语法突出显示模式选择,并nano
最终将该文件视为标准文本文件。
如果您可以重新配置nano
以将任何nanorc*
文件视为配置文件,您将能够恢复您所追求的行为。否则我不确定是否有办法自动处理这个问题。
答案2
尝试
function sunano {
export SUDO_EDITOR='/usr/local/bin/nano'
sudoedit -E "$@"
# ^^
# add this
}
-E or --preserve-env
将您的环境变量传递给新进程