Emacs的智能家居

你可以在Emacs的主键有聪明的行为? 通过智能我的意思是,而不是去字符数字0,它应该去第一个非空白字符,并在第二个按下去0,并回到第一个非空白的三分之一,依此类推。 聪明结束也会很好。

(defun smart-beginning-of-line () "Move point to first non-whitespace character or beginning-of-line. Move point to the first non-whitespace character on this line. If point was already at that position, move point to beginning of line." (interactive "^") ; Use (interactive) in Emacs 22 or older (let ((oldpos (point))) (back-to-indentation) (and (= oldpos (point)) (beginning-of-line)))) (global-set-key [home] 'smart-beginning-of-line) 

我不太确定什么聪明的结局会做。 你通常有很多尾随的空白?

注意:这个函数和RobertVuković之间的主要区别在于,即使光标已经在那里,他总是移动到第一个按键上的第一个非空白字符。 在这种情况下,矿井将移动到第0列。

另外,他使用了我(beginning-of-line-text)使用的(beginning-of-line-text) (back-to-indentation) 。 那些非常相似,但是它们之间有一些差异。 (back-to-indentation)始终移动到一行中的第一个非空白字符。 (beginning-of-line-text)有时会移过它认为不重要的非空白字符。 例如,在注释行中,它将移动到注释文本的第一个字符,而不是注释标记。 但是任何一个函数都可以用在我们的答案中,这取决于你喜欢哪种行为。

这适用于GNU Emacs,我没有用XEmacs试过。

 (defun My-smart-home () "Odd home to beginning of line, even home to beginning of text/code." (interactive) (if (and (eq last-command 'My-smart-home) (/= (line-beginning-position) (point))) (beginning-of-line) (beginning-of-line-text)) ) (global-set-key [home] 'My-smart-home) 

感谢这个方便的function。 我现在一直在使用它,并喜欢它。 我做了一个小的改变:(交互式)变成:(交互式“^”)

从emacs帮助:如果string以^' and开头,shift-select-mode不为零,Emacs首先调用“handle-shift-select”函数。

基本上,如果使用shift-select-mode,则可以从当前位置到行首selectshift-home。 这在微型缓冲器中特别有用。

请注意,已经有一个返回缩进function,它可以完成第一个智能家居function所要做的事情,即进入行中的第一个非空白字符。 它默认绑定到Mm。

现在有一个包可以做到这一点, mwim (移动我的意思)

我使用@Vucovic代码来跳转到第一beggining-of-line

 (defun my-smart-beginning-of-line () "Move point to beginning-of-line. If repeat command it cycle position between `back-to-indentation' and `beginning-of-line'." (interactive "^") (if (and (eq last-command 'my-smart-beginning-of-line) (= (line-beginning-position) (point))) (back-to-indentation) (beginning-of-line))) (global-set-key [home] 'my-smart-beginning-of-line)