2008-09-28 46 views
36

您是否對Emacs中的家庭鑰匙具有智能行爲?通過智能我的意思是,而不是去到字符數字0,它應該去第一個非空白字符,並在第二次按下去0,並回到第三個非空白的第三個,依此類推。 聰明結束也會很好。Emacs中的智能家居

回答

58
(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ć's的主要區別在於,即使光標已經在那裏,他總是會移動到第一個按鍵上的第一個非空白字符。在這種情況下,礦井將移動到第0列。

另外,他用(beginning-of-line-text)我用(back-to-indentation)。這些非常相似,但它們之間有一些差異。 (back-to-indentation)總是移動到一行上的第一個非空白字符。 (beginning-of-line-text)有時會移過它認爲不重要的非空白字符。例如,在只有評論的行中,它會移至評論文本的第一個字符,而不是評論標記。但是任何一個函數都可以用在我們的答案中,這取決於你喜歡哪種行爲。

+1

遺憾的是它不與CUA工作啓用,在這種情況下,選擇換檔不起作用,換回家選擇完整的行不起作用。有什麼建議麼? – 2010-05-27 08:40:28

+0

@亞歷山大·斯托爾茲,我從來不使用cua模式,但嘗試在'defun'之後添加'(把'聰明開始'的'CUA'動作)'(即在'global-set-key`之前添加'線)。 – cjm 2010-05-27 09:18:14

12

這適用於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) 
4

注意,已經有一個背到縮進功能,你想要做什麼第一智能家居功能做的,也就是去上線的第一個非空白字符。它默認綁定到M-m。

6

感謝這個方便的功能。我現在一直都在使用它並喜歡它。我所做的只是其中很小的變化: (互動) 變爲: (交互式「^」)

從Emacs幫助: 如果字符串以^' and按住Shift鍵選擇模式」開始爲非nil,那麼Emacs首先調用函數`handle-shift-select'。

基本上,如果您使用shift-select-mode,則可以從當前位置移動到行首。它在微型緩衝器中特別有用。

0

我適應@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) 
2

現在有一個包,做到了這一點,mwim(移動在哪裏我的意思)

相關問題