題 Vim標籤和空格


我希望我的vim縮進工作如下:如果我有

▷   ▷   int function(int x,▒int y, int z) {

我按回車鍵,我想得到以下內容:

▷   ▷   int function(int x,
▷   ▷   _____________int y, int z) {

“▷”是標籤,“_”是空格。

換句話說,我想使用製表符,但如果我在沒有添加縮進級別的地方有換行符,那麼非縮進行應該與空格對齊。

這允許我使用製表符進行縮進,但保留非縮進級別的格式,以便即使更改製表符大小也會保留格式。

到目前為止,我還沒有找到一種可以用Vim實現的方法。 Preserveindent和copyindent不是我想要的。他們尊重expandtab,我想只使用expandtab進行縮進,並使用空格進行對齊。


5
2017-10-04 04:57


起源


我認為這是通過語法文件完成的。不要引用我(因此這是一個評論,而不是答案)。 - VxJasonxV
@VxJasonxV:語法文件不會這樣做,但縮進文件可能會這樣做。 - garyjohn
縮進文件不會執行此操作。縮進文件返回要使用的縮進級別數,根據shiftwidth和expandtab將其轉換為製表符或空格。這不允許我使用製表符縮進和空格對齊。 - So8res
我以為這也是一個語法文件。抱歉浪費你的時間:)。 - VxJasonxV


答案:


根據 Vim Wiki智能標籤 插件會這樣做。我自己沒試過。


2
2017-10-04 07:33



這允許我僅在行的開頭使用製表符,但是當例如括號未閉合時不會自動更改為空格。 - So8res


目前,這在vim中看起來並不可行。您可以選擇標籤或空格,也可以兩者都有。不足為奇,因為標籤上的空格時間對語言非常敏感。考慮一下:在python中,你會如何對待:

x = fn(abc, 'def', {
                       ghi: jkl,
                       mno: pqr,
                   })

你應該在某個時候回到標籤嗎?這將是理想的,但非常符合上下文,並且不會真正起到跨語言的作用。另一個有趣的例子,在haskell:

data Something = Something { flag1 :: Bool
                           , flag2 :: Bool }
               deriving (Eq, Ord, Show)

祝一切順利。

我已經得出結論,遺憾的是,特定於語言的擴展對於這種功能是必要的。但是,如果你知道這樣做的好方法,我很樂意聽到它。


1
2017-11-16 22:10