emacs sudo编辑远端文件

在之前的一篇文章里提到过在Emacs下使用sudo的方法。这个解决了我很多本地编辑的问题。但是我还是抛不开vi,因为一直没有解决服务器上需要sudo才有权限的文件编辑问题。

现实中这是一个很普遍的现象,就是在服务器上关闭了root或者其他用户的ssh登陆权限,是通过一般用户登陆以后通过sudo等方式获得权限后才能进行进一步的文件编辑。而如果直接使用sudo,用比如/sudo:user@host:filepath的方式来打开文件,Emacs会报错说这是一个远端文件,不能使用sudo来进行操作。就因为这提示,导致我一直以来对于这样的情况只能乖乖地开个shell跑到服务器上面去用vi编辑,编辑过程中的各种不爽在此不表……

不过当最终忍受不住这种只能用vi的寂寞后,终于下定决心看一下tramp的手册,结果很好,发现了这么一章内容――Connecting to a remote host using multiple hops,原来tramp是可以通过设置代理的方式来编辑那些无法直接访问到的文件的。代理可以是各种Inline method,也可以是Gateway method。所以通过ssh做跳板再sudo是完全可行的。

设置的格式是(host user proxy),其中proxy可以使用%u%h来通配输入的用户名和主机名。详细情况感兴趣的童鞋可以细看手册,这儿就只贴出满足我的需求的代码了:

(add-to-list 'tramp-default-proxies-alist
             '(nil "\\`user\\'" "/ssh:%h:"))

经过这样的设置,就可以直接使用/sudo:user@host:filepath来编辑那些远端需要sudo的文件了。所以,泡杯茶,扔掉vi吧 : )

对“emacs sudo编辑远端文件”的2条评论

  1. Avatar

    是的, 这个就是tramp的魔力之所在。

    BTW, 如果是编辑本地需要root权限的文件, 可以/sudo::/path/to/file

  2. Avatar

    不错,这正是我需要的!