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吧 : )

Mac下使用It's All Text

Firefox之所以一直是我最喜欢的浏览器,主要是因为其所拥有的那庞大的扩展库。如果说Tab Mix Plus、AdBlock、XXXProxy等等对我来说是一些浏览必须的扩展的话,那么It's All Text!就是我在需要在网页上进行大篇幅网页输入──比如输入这篇blog──时必须的扩展了。

It's All Text!能够将网页中的textarea的内容转由自己所熟悉的编辑器来编辑,使得输入效率大大提高。另外,由于在编辑时会在本地储存一份copy,所以也避免了由于不小心关闭网页而导致内容丢失的情况。之前在写博的时候经常会因为误操作丢失了辛辛苦苦输入的大段文字,本来是想给页面加一个unload事件的处理函数来避免这样的错误的,但是由于It's All Text!的出现,这功能到现在都没加上,因为实在没这必要了……

继续阅读

Emacs on osx

尔会在老婆的Macbook上做事,所以弄一套开发环境是有必要的,Emacs作 为我的首选编辑器自然首当其冲。由于在Emacs官方主页上并没有提供Mac OS X版的下载,自己又懒得去编译,最终选择了Emacs for Mac OS X。

 Emacs的配置是没啥问题的,就是多加了一个判断,在system-type是darwin的情况下,做一些OS X特别的配置就行了。我这儿也就设一下字体,开个server而已,简单得紧。

这个版本的Emacs倒是挺智能的,知道在启动了一个Emacs之后,如果从finder中打开其他文件的话,会自动使用emacsclient去 打开文件。但是有一个挺郁闷的地方,就是默认情况下,新打开的文件都会新建一个Frame。我在智能地启动emacs一文中就提到过,我还是比 较喜欢使用单一窗口,所以这点必须调整一下。

继续阅读

ZenCoding

天在热文上发现了一篇关于ZenCodng的文章,一开始仅仅以为就是一个简单的缩写展开插件,但是细看才发现不仅仅是这样,这是一个相当完备的DSL。它使用了如同CSS 3选择符一样的语法来声称HTML,但是又提供了一定的加强,比如复数标签、自动编号、div标签的自动补全。

继续阅读

智能地启动emacs

Emacs的启动速度是一直为非E众诟病的。虽然说现在机器是越来越快了,用我常用的配 置,直接启动emacs也就等个2-3秒,但是和gvim比起来还是太慢了。不过Emacs提供了一个CS模式,在Emacs23以前,可以在一个已打开 的Emacs上启动server,之后就可以用emacsclient通过连接到server的方式打开文件。在这种模式下,除了第一次打开Server Emacs耗时比较长外,之后每次起client的速度那都是唰唰的。这是我现在在Win下主要的打开Emacs的方式。这样有一个问题,如果关闭开启 Server的那个Emacs,emacsclient就无法连接了,解决办法是给emacsclient加上--alternative-editor=<path-to-emacs>这 样的参数,在失败时启动一个新的Emacs,当然这样就感受不到直连server的高速爽快感觉了:P

继续阅读

最近关于Emacs的二三事

天twitter上参与了一次关于emacs的讨论,当时ahei便立刻找我说让我写点 关于emacs的东西。但是我也只是拿emacs作为一个顺手的编辑器而已,要真是说让我憋点文字出来,估计即便写出来了也没有什么人爱看的 ╮( ̄▽ ̄)╭ 。话说最近倒也是碰上了一两个问题,现在也就顺手一记吧。

继续阅读

区别emacs同名buffer

件同名是经常出现的事,其他编辑器是咋样的我不清楚,未经过配置的Emacs会在同名buffer后面加上<2><3>这样的序列来区分。但是这种做法并不直观,同名的buffer开多了就会搞混了。

事实上emacs已经提供了保持每个buffer名唯一的功能,在菜单栏依次点击 Help > Search Documentation > Lookup Subject in User Manual(抱歉,我一直没找到这个菜单项对应的命令……),然后在mini buffer里输入uniquify的话就能看到相应信息了。

继续阅读

后知后觉地发两个Emacs 23的新特性

Emacs 23说来发布也有些时日了,对我来说,最大的改进就是提供了方便的daemon来提高启动效率。至于其他的改进么,倒也一直没有注意。今天闲来无事随便逛逛,发现了两个关于选区新的功能,使得选区操作更为直观简便。

选择选区的新方法

以前要是想选择一段文字的话,要么就是用鼠标选择,要么就是先设下一个mark定为起点,然后移动光标到终点来选择(根据emacs的版本可能需要C-x C-x来激活选区)。由于默认的设定mark的快捷键C-@按起来很不方便,我还专门把F2设为了热键。但是现在Emacs 23提供了一种新的方式,按住shift后移动光标进行选择,虽然说这个在通常编辑器里算是基本功能了,但对Emacs来说不能不说是一个新功能。另外,在按住shift时,还能使用Emacs的常用的M-fM-b啊等光标移动方式来移动,在小段文字选择时还是非常方便的。

替换选区文字

这又是一个Emacs向通常文本编辑器学习的地方。以前如果选中一段文字后进行输入的话,新敲入的字符会插入到光标所在坐标,而选区文字并不会改变。这是一个狠让人困惑的地方。如果想要替换选区文字,就不得不多按一下C-w先删除掉选区。但Emacs 23引入的这个新的功能能够让我们沿用通常的习惯,只要在配置文件中加上

(delete-selection-mode t)

就可以了。当然你也可以根据需求手动执行这条命令来启用或禁用该模式。

Emacs和sudo

在最常用的编辑器还是emacs,但是有的时候还是离不开vi,主要还是因为有时要编辑一些用户权限外的东西的关系。用vi的话可以使用sudo,而emacs虽然也能sudo,但我想大部分人是不愿意的,因为这样就无法享受到emacs daemon的便利而不得不在root名下专门开启一个emacs进程。

不过emacs有Tramp(Transparent Remote (file) Access, Multiple Protocol),所以可以以C-x C-f /root@localhost:<filepath>来作为root ssh到本机进行编辑。但这终究不是啥方便的办法,一是不得不使用root登录,二是在其他buffer上想再继续sudo编辑其他文件的时候还得再次输入这串连接字符串,因为ido并不会自动完成。所以一直以来,编辑/etc下的文件我还是使用vi来完成。

不过最近发现了Tramp的另外一项功能:sudo。使用C-x C-f /sudo:root@localhost来打开文件就可以了。比起上述方法最为便利的是连接字符串可以自动完成,而且使用的是sudo的方法,所以连接是使用的是当前sudoer的密码。目前用下来没有什么大问题,基本就能抛开vi了。

dpaste

是后知后觉了,一直想要一个好用的codebin,结果到现在才发现这么个网站── dpaste 。这是一个基于django和sqlite的站点,非常的简单,对于追求简单的我来说,恰对胃口。让我感觉最爽的一点,是emacs的绑定功能,el文件可以在 Emacs Binding 获得。在 .emacs 中加入 (require 'dpaste) 后,就可以使用 M-x dpaste-region/dpaste-buffer/dpaste-region-or-buffer 来把选定的代码或整个buffer直接发送到 dpaste ,代码的语言会根据当前emacs的运行模式设置,比如在python-mode下则使用python的格式。

不过这个el在我的Archlinux + emacs23上运行有一点问题,无法取得返回的链接地址,并且在发送纯文本格式时时出现错误。 经排查发现,一是正则对换行符没有处理,二是Plain格式的值应为空,所以制作了如下的补丁,给和我碰到同样问题的Emacser。:)

补丁@dpaste

http://dpaste.com/hold/92114/

继续阅读