2010-01-13 70 views
19

有很多次,我有一段代碼,我想發佈一個缺陷跟蹤,維基,論壇等,但它在代碼縮進深。我通常不得不突出顯示代碼段,點擊< shift> - < tab>,直到縮進不是那麼糟糕,然後複製/粘貼然後恢復代碼。它有點痛苦。,取消縮進代碼片段

是否有一個工具,可以消除在每行前面的標籤?請注意,我不想刪除所有行中的所有標籤,只是每行的標籤數量相同。我在想Emacs的一些功能可以做到這一點。

下面是一個極端的例子:

前:

 
          //This is usually some method in an anonymous inner class' anonymous inner class. 
          @Override 
          public void method(){ 
           doSomething(); 
          } 

後:

 
//This is usually some method in an anonymous inner class' anonymous inner class. 
@Override 
public void method(){ 
    doSomething(); 
} 

注意如何DoSomething的()仍然在它前面的一個標籤。

+0

@Roger:感謝您的評論。我重新提出了這個問題。 – User1 2010-01-13 22:33:16

回答

38

矩形選擇這樣做的我的首選方式。

把自己在第一行的開頭,C-空間,轉到最後一行,你要刪除的縮進的結束和CX[Rķ(矩形殺) 。這就是它。

+0

我不喜歡這種方法,因爲空白是問題,你應該只刪除空格,這種方法會刪除該區域中的所有字符。 – 2010-01-13 22:45:26

+0

這是我一直這樣做的方式。但我喜歡縮進嚴格的解決方案@ http://stackoverflow.com/questions/2060442/unindenting-code-snippets/2060803#2060803 – 2010-01-14 14:30:03

+1

我不得不閱讀了幾次才明白「去到最後一行和縮進的結尾「。現在矩形殺死是有道理的。如果只有emacs函數可以自動終止矩形,請將代碼複製到剪貼板,然後撤消kill。 – User1 2010-01-14 15:17:37

-3

在六,它只是<<左移一個縮進寬度,所以對於unindent 10行,你會做10<<

0

使用正則表達式刪除前導空格。

在Emacs中:

C-M-%^<TAB><TAB><TAB><ENTER><ENTER>! 

在Vim中:

:%s/^\t\t\t//g 
+0

這隻會刪除每行上的前3個選項卡。所以第四或第五縮進將成爲第一或第二縮進。 '^'字符表示「開始行」。 – 2010-01-13 21:45:55

+0

這並沒有回答這個問題,除非你真的認爲他應該從emacs複製文本,粘貼到vim中,修改並複製粘貼到其他地方,這似乎不是一個有用的答案。還需要統計不記名人數,當然還有更好的方法。 – 2010-01-13 22:00:16

+1

我沒有注意到'emacs'標籤,因此vim中的解決方案。添加一個emacs變體。 – 2010-01-13 22:33:58

13

在Emacs中執行此操作的實際方法是使用此組合鍵。

首先選擇要從中刪除標籤的部分。

您可以選擇整個緩衝區:

CTRL + X^h

或者,如果你只是想簡單地設置一個區域的標誌CTRL + SPACE在那裏你想要開始,然後導航到您想要結束的位置。

然後取出的空白,爲10個空白字符做到這一點:

CTRL + - CTRL + XTAB


由於這是相當大的,我會爲你分解它。

1)首先,我們得到負參數命令:

(負參數ARG)

KBD快捷:CTRL + -

2)接着供給的數值參數,在這種情況下數字10:

3)然後我們所說的縮進硬性命令

(縮進剛性地START END ARG)

大骨節病的快捷方式:CTRL + XTAB

那麼什麼我們正在做的是給命令的參數-10縮進 - 剛性,結果是10個空格字符將從每行的開始處被刪除在這種情況下,我們選擇了整個文檔(CTRL + xh),因此將從整個文檔的每一行的開頭刪除10行空格。

如果特定行的空白少於10個,它將只刪除儘可能多的空白,如果有超過10個空格,那麼在完成後可能會留下一些空白。

在您的例子,它看起來像你有大約30前導空格,所以這應該做的伎倆:

CTRL + - CTRL + XTAB

如果您想刪除更多,請嘗試更大數字。

1

我Kedit(其中有做列編輯的能力)的使用方法是爲了紀念第一列的第一個字符,並與Alt鍵行 - ,我的光標定位到最後一排和字符我想刪除,Alt - B再然後替代 - G。它已經消失並且仍然具有除去已刪除列的所有縮進。
在SQL Server中,更容易,標記塊並按shift-tab,直到代碼出現在我想要的位置。

1

如果您確切知道每行的前綴數量(如您所述),則可以使用簡單的query-replace-regex替換"^\t\t\t...\t"""

6

如果您的emacs c樣式設置正確,則只需突出顯示該代碼段並按C-M-\就會正確縮進(如果您處於C++模式下)。