2010-10-21 63 views
6

我已經使用XCode和Netbeans,並且我注意到它們有一個自動完成引號或圓括號的功能(並且我認爲其他IDE也經常這樣做)。我不知道這個特性的名字是什麼,但是在Emacs中有沒有辦法做到這一點?是否可以在emacs中自動完成圓括號或引號?

例如,當I型

printf(" 

我想它自動輸入

printf("") 

將光標放置在引號之間。

謝謝。

+0

我之前使用過這樣的宏,但我今天使用了很多不同的編輯器(emacs,vs,eclipse,pn),我不能依賴這樣的特性。相反,我內化了這種行爲,並且幾乎不需要反射地插入相應的平衡字符就可以輸入左側字符。看到我這樣做的非程序員認爲我很奇怪。 – Zano 2010-10-22 08:47:11

回答

7

基本變體是AutoPairsYASnippet也可以達到同樣的效果,但更復雜一點。

+0

看起來像AutoPairs和Paredit是兩個流行的建議,但它看起來像AutoPairs是與YASnippet很好地集成,這對於進一步的代碼完成是很好的。 – beardc 2010-10-23 13:15:56

3

如果你鍵入M-(,它將同時插入一個(和一個)和離開點;如果你然後鍵入M-),這將移動關閉點)。我經常用這個。

還有一種稱爲「paredit」的模式(可從http://mumble.net/~campbell/emacs/paredit.el獲得),它也可以用於引用以及可能的其他內容。

+0

在我的配置中,'M-)'綁定到'move-past-close-and-reindent',即它開闢了一條新線。是否有可能在沒有重新加註的情況下移過封閉的圓括號? – phimuemue 2010-10-22 06:10:56

+0

'M-- C-M-u'可能會做你想做的事。 – offby1 2010-10-24 19:52:47

3

Paredit模式默認插入匹配閉合元素,所以在輸入的同時您將看到類似printf()然後printf("")的東西,並且光標將位於引號內。

0

autopair小模式完全符合您的要求。

2

我的5分錢也在這裏。

(setq skeleton-pair t) 
(defvar skeletons-alist 
    '((?\(. ?\)) 
    (?\" . ?\") 
    (?[ . ?]) 
    (?{ . ?}) 
    (?$ . ?$))) 

(global-set-key (kbd "(") 'skeleton-pair-insert-maybe) 
(global-set-key (kbd "[") 'skeleton-pair-insert-maybe) 
(global-set-key (kbd "\"") 'skeleton-pair-insert-maybe) 
(global-set-key (kbd "\'") 'skeleton-pair-insert-maybe) 

下一頁諮詢將使退格以刪除對:一個(|)B - > AB

(defadvice delete-backward-char (before delete-empty-pair activate) 
    (if (eq (cdr (assq (char-before) skeletons-alist)) (char-after)) 
     (and (char-after) (delete-char 1)))) 

下一頁建議將使backward-kill-word(對我來說是M-退格)即使被其他文本分隔也可以刪除匹配的文件;非常便利。

(defadvice backward-kill-word (around delete-pair activate) 
    (if (eq (char-syntax (char-before)) ?\() 
     (progn 
(backward-char 1) 
(save-excursion 
    (forward-sexp 1) 
    (delete-char -1)) 
(forward-char 1) 
(append-next-kill) 
(kill-backward-chars 1)) 
    ad-do-it)) 

雖然我現在試圖移動到paredit。

+0

由於Autopairs似乎沒有自動刪除對,這個反向刪除對建議看起來像一個很好的補充。 – beardc 2010-10-23 13:18:00

相關問題