2008-12-28 44 views
21

背景: JEdit(以及其他一些文本編輯器也支持)稱爲Multiple simultaneous text insertion points的功能。 (至少這就是我在這裏所說的)。Emacs,Vim和JEdit中的哪些編輯器支持多個同時插入文本點?

要理解這意味着什麼,請查看鏈接。

在現代文本編輯器中使用的所有功能中,最初的研究似乎表明,這是Emacs和Vim實際上不支持的這兩個的一個功能。如果正確的話,這將是非常特殊的,因爲很難找到一個文本編輯器功能,至少還沒有進入這兩個老派編輯的。

問題:有沒有人在Emacs,Vim或兩者中看過或實現過這個功能?如果是這樣,請給我一個鏈接,腳本,參考或摘要來解釋詳細信息。

如果您知道另一種方法來做相同(或類似)的事情,請讓我知道。

+0

它真的有用嗎? – PEZ 2008-12-28 18:51:18

+0

有用嗎?這是有爭議的。儘管如此,這個特色近來在一些高調的文本編輯中似乎正在引起轟動,所以它絕對超過了「純學術」的水平。 – dreftymac 2008-12-28 18:55:35

+0

我一直坐在這裏想着我所有的時間,我會在我上一個項目中使用這個...我不會有。它真的聞起來像尋找問題的解決方案。僅僅因爲其他編輯正在進行功能競賽並不意味着它是需要的。 – jpeacock 2008-12-28 19:22:51

回答

8

vim做到這一點的方法是。重複上次更改的命令。所以,例如,如果我將指針改爲參考,並且我有一堆 obj-> func ,我想更改爲 obj.func 然後我搜索obj->,do 2cw以更改obj - > obj。,然後做nnn直到所有實例發生變化。

也許不像您正在談論的那樣靈活,但它的工作頻率非常高,而且非常直觀和快速。

3

我不認爲這個特性在Emacs或Vim中有直接的模擬效果,這並不是說用這種「老派」編輯器以某種方式實現這個功能所能達到的一切都是不可能的。就像Emacs和Vim的大多數事情一樣,即使像我這樣的凡人可以花五分鐘計算出正確的grep搜索並替換爲適當的反向引用,功耗用戶也可能非常快速地完成這樣的任務。

6

在EMACS中,你可以/將會用M-x find-grep和一個宏來做到這一點。如果你真的堅持認爲它是全自動的,那麼你會在宏中包含find-next

但說實話,這讓我覺得它是一種微軟功能:是的,它增加了功能列表,但爲什麼呢?你會記得它在六個月內存在,當你想再次使用它嗎?

7

moccur-edit.el幾乎做你想要的。顯示匹配正則表達式的所有位置,並且編輯匹配會在相應的源中進行更改。但是,編輯是在事件的單個實例上完成的。

我想可以直接將它擴展爲允許您同時編輯它們(至少在簡單情況下)。

有一個它的演示here

原來,最新版本的moccur-edit不會實時應用更改 - 您必須應用更改。這些變化現在也可以撤銷(好勝利)。

-2

這看起來像正則表達式搜索/替換爲傻瓜。當用戶沒有意識到計算機提出的概括是錯誤的時候,麻煩就開始了。如果選擇的替代概括會在第1200屏幕的編輯區域產生災難,麻煩會變得更糟。

這就是說 - 不,根據我所知,Emacs沒有支持。

1

應該是這樣在vim:

%s/paint.\((.*),/\1.paint(/ 

或者類似的東西,我在「模擬」正則表達式非常糟糕。

的想法是替代模式:

/paint(object,/ 

/object.paint(/ 

所以,是的,它是 「支持」

1

在Emacs lisp中做這個基本版本似乎很簡單。這是因爲當你只是想兩個地方並行插入文本:

(defun cjw-multi-insert (text) 
    "insert text at both point and mark" 
    (interactive "sText:") 
    (insert-before-markers text) 
    (save-excursion 
    (exchange-point-and-mark) 
    (insert-before-markers text))) 

當你運行它,它會提示輸入文本,並在這兩個點(當前位置)和馬克將其插入。您可以使用C-SPC來設置標記。這可以很容易地擴展到N個不同的位置。像set-insert-point這樣的函數會將當前位置(存儲爲Emacs marker)記錄到一個列表中,然後當您運行多插入命令時,它會遍歷列表並在每個列表中添加文本。

我不知道什麼是一種簡單的方法來處理更一般的「多編輯」功能。

1

另一個輕微相似:在Emacs中,通過cua-selection-mode(或cua-mode)中提供的矩形編輯功能自動提供多個插入點向下標記矩形的左邊緣或右邊緣,這樣就可以鍵入一個共同的前綴或後綴來所有這些線路。

例如:
的Mxcua-selection-modeRET(啓用全局次要模式下,如果你還沒有使用這個或CUA模式)
C-RET下來下來下來(標誌着一個1×3字符矩形)這裏
類型前綴
C-RET(取消標記的矩形,返回到正常編輯)

相關問題