Vim
如何告訴 VIM 在新行上格式化函式、條件和循環的括號?
有沒有辦法告訴 vim 在新行上格式化括號?
例如:
public class Foo { private Foo(int a) { if (a > 30) { // do stuff } for (int i = 0; i < a; i++) { // more stuff } } }
應該變成:
public class Foo { private Foo(int a) { if (a > 30) { // do stuff } for (int i = 0; i < a; i++) { // more stuff } } }
為什麼這個?因為通過按
zc
VIM 很好地折疊程式碼塊,如果它們是第二個範例的格式。在這種情況下,VIM 只會折疊括號內的內容。如果程式碼的格式與第一個範例相同,VIM 不僅會折疊括號內的內容,還會折疊if (...)
、for (....)
、function f()
、class Foo()
等。所以我想知道是否有辦法告訴VIM像第二個例子那樣格式化文件。另一種選擇是告訴 VIM 不要折疊括號前的內容。
是的,你可以很容易地做到這一點:
$
用輸入符 (\r
) 和新的 ‘{’ 替換行尾 () 中現有的 ‘{’ 字元,然後很好地格式化,你可以執行以下兩個命令(儘管請參閱邊緣情況答案末尾的編輯)::%s/{$/\r{ :%norm ==
第一個命令將達到此目的:
public class Foo { private Foo(int a) { if (a > 30) { // do stuff } for (int i = 0; i < a; i++) { // more stuff } } }
第二個命令將達到此目的:
public class Foo { private Foo(int a) { if (a > 30) { // do stuff } for (int i = 0; i < a; i++) { // more stuff } } }
(上述命令中的
%
符號表示適用於文件的所有行。您可以改為給出一個範圍:5,10s/{$/\r{
, 如行)。-2,+3s/{$/\r{``:
(您也可以將格式應用
=ap
到格式a
p
aragraph,詳情請參閱:help =
)編輯
來自@blackyellow 的評論:這是一個很好的解決方案,但一個問題是它還用 ‘}’ 替換了已經正確格式化的行。更好的模式是
:%s/[^( |\t)]}$/\r{
,如果 ‘}’ 前面有兩個空格或一個製表符,它不會在末尾用 ‘}’ 替換行,這表明它可能正確縮進。