簡體   English   中英

vim中的哪些設置抵消了smartindent拒絕在shell腳本中縮進#comment?

[英]What setting in vim counteracts smartindent's refusal to indent # comments in shell scripts?

我最近開始使用vim 7(之前的vim 6)和smartindent設置。 在大多數情況下,它運作良好,雖然我習慣在打開支撐后鍵入一個選項卡,這幾乎適得其反。

然而,有一種瘋狂的行為。 在編輯shell腳本時,我嘗試在當前縮進級別創建注釋,但smartindent將與它無關。 它堅持認為評論必須在0級(沒有縮進)。 更糟糕的是,它打破右移(' >> '和朋友),使他們無法正常工作。 這是徹底的不服從,我想知道解決它的最佳方法是什么?

(我也不喜歡smartindent關於縮進的想法then if 。)

首選的解決方案將節省我手動抨擊 - 我很懶。 一種選擇是“在編輯shell腳本時關閉smartindent (其余部分保持打開狀態)”。 另一種選擇是如何為smartindent找到控制腳本以及如何編輯以改變我不喜歡的特征的指南。 最后的選擇(我不需要關於如何做的建議 - 只是暗示它是最好的,或者唯一的,恢復理智的方式)是讓smartindent設置。

我看到了關於“ (PHP和)惱人的vim unindent規則 ”的模糊相關問題; 它沒有給我直接的答案,盡管其中提到的cindent和相關項目實際上是答案的一部分。

找到縮進文件,(例如我系統上的/usr/share/vim/vim71/indent/sh.vim)

這條線看起來像問題:

setlocal indentkeys-=:,0#

也許您可以在.vimrc中修復此問題或手動加載自定義縮進文件。

編輯:它看起來比我想象的要復雜,但也許在縮進文件中有一些特別設置的東西你需要修復。

第二次編輯:看起來我完全錯了,看看:

鍵入哈希后恢復縮進

要么

HOWTO-配置的vim -到-不把-意見,在最開始-的線,而編輯

好吧,在探索了一些選項后,包括使用' :set cindent '而不是' :set smartindent ',我最終還是回到了使用' :set autoindent '。 可能有一些方法可以讓這些東西完全按照我想要的方式工作,但它足夠混亂,而且非常繁瑣,我不能被打擾。 在過去的20多年里,我和autoindent合作得很好,而smartindent提供的額外鈴聲和口哨的好處被我認為的不當行為所抵消。

感謝Juan,感謝您的幫助。 信不信由你,它確實有所幫助 - 相當多。

不過,我還發現了其他一些簡潔的命令,同時對此進行了跟進:

>i}
>a}

這些右移你在代碼塊。在“ i ”版本縮進身體,而不是結束括號(我喜歡的風格),和“ a ”版本縮進閉幕括號到(版本,在工作需要)。

此外,您可以在shell中執行的命令中將限定符應用於' % ':

:make %:r.o

這將在當前文件名(即' %:r ')的'根'上運行make,然后是' .o '。 或者,換句話說,如果我正在編輯somefile.c ,則執行make somefile.o

在.vimrc中添加以下行

文件類型縮進

(它將根據文件類型設置正確的縮進模式)

我有同樣的問題很長一段時間,直到我意識到如果你的vimrc中設置了“filetype indent on”,autoindent和smartindent都是不必要的 - 'filetype indent on'使用indent / sh.vim(或任何語言)文件在你的vim目錄中找出縮進規則,autoindent和smartindent都可以干擾它。

我沒有用sh測試過這個,但是當我切換時perl突然開始表現正常。

旁注:Juan的重定向,“在輸入哈希后恢復縮進”,不是一個好的解決方案 - 雖然它確實在一種情況下糾正了問題(鍵入代碼),但它並沒有改變編輯器認為它應該縮進的方式,所以a重新縮進(visual =,或= =)會將其推回到左側。

之前的回答表明:

:inoremap#X ^ H#

很棒。 這是VIM文檔在“:help smartindent”中提出的答案。 請注意,使用CTRL-V CTRL-H輸入^ H. 文檔中的相關部分如下。

    When typing '#' as the first character in a new line, the indent for
    that line is removed, the '#' is put in the first column.  The indent
    is restored for the next line.  If you don't want this, use this
    mapping: ":inoremap # X^H#", where ^H is entered with CTRL-V CTRL-H.
    When using the ">>" command, lines starting with '#' are not shifted
    right.

我的.vimrc中有以下幾行,我沒有注意到這個問題。

set smartindent
inoremap # X^H#

我曾經在這兩行之后設置了autoindent ,但它似乎沒有效果。

是的,這煩人。 smartindent實際上只適用於C語言。 了解如何根據以下語言啟用適當的縮進: http//www.pixelbeat.org/settings/.vimrc

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM