27

最近、vim 7 (以前は vim 6) とそのsmartindent設定を使い始めました。ほとんどの場合、それはうまく機能しますが、開き括弧の後にタブを入力することに慣れているため、ほとんど非生産的です。

ただし、マニアックな動作が 1 つあります。シェル スクリプトを編集するとき、現在のインデント レベルでコメントを作成しようとしますが、それsmartindentとは関係ありません。コメントはレベル 0 (インデントなし) でなければならないと主張しています。さらに悪いことに、右シフト (' >>' とその仲間) が壊れてしまい、機能しなくなります。これは完全な不服従であり、それを修正する最善の方法を知りたいですか?

(また、 の後smartindentのインデントに関する のアイデアにも熱心ではありません。)thenif

推奨される解決策は、手動でのバッシングを節約します - 私は怠け者です。1つのオプションは、「シェルスクリプトを編集するときはオフsmartindentにする(残りはオンのままにする)」です。別のオプションは、制御スクリプトを見つける方法と、smartindent気に入らない特性を変更するために何を編集するかについてのガイドラインです。最後の選択肢 (どうすればよいかについてのアドバイスは必要ありません。健全性を回復するための最善の、または唯一の方法であるというヒントだけです) は、smartindent未設定のままにすることです。

「 (PHPと)厄介なvimのインデントルール」に関する漠然と関連する質問を見ました。直接的な答えは得られませんがcindent、そこに記載されている関連項目が実際には答えの一部である可能性があります。

4

7 に答える 7

11

インデントファイルを見つけます(例:私のシステムでは/usr/share/vim/vim71/indent/sh.vim)

この行は問題のように見えます:

setlocal indentkeys-= :, 0#

おそらく、これを.vimrcで修正するか、カスタムインデントファイルを手動でロードすることができます。

編集:思ったより複雑に見えますが、インデントファイルに特別に設定されているものがあり、修正する必要があるかもしれません。

2番目の編集:私は完全に間違っていたようです、チェックしてください:

ハッシュを入力した後のインデントの復元

また

howto-configure-vim-to-not-put-comments-at-the-beginning-of-lines-while-editing

于 2008-12-22T01:41:15.060 に答える
3

vimrcで「filetypeindenton」が設定されている場合、autoindentとsmartindentの両方が不要であることに気付くまで、これと同じ問題が長い間発生していました。インデントルールを理解するためにvimディレクトリで、autoindentとsmartindentの両方がそれを妨害する可能性があります。

私はこれをshでテストしていませんが、切り替えたときにperlが突然正常に動作し始めました。

補足:Juanのリダイレクト「ハッシュを入力した後にインデントを復元する」は良い解決策ではありません-ある状況(コードを入力する)では問題を修正しますが、編集者がインデントする必要があると考える方法は変わりません。再インデント(visual =、またはnormal ==)は、左に押し戻します。

于 2009-04-22T13:54:52.190 に答える
3

以下の行を.vimrcに追加します

ファイルタイプのインデント

(ファイルタイプに応じて正しいインデントモードを設定します)

于 2009-01-12T17:44:09.440 に答える
3

:set cindent' ' の代わりに ' 'を使用するなど、いくつかのオプションを検討した後、 ' :set smartindent' のみを使用することに戻りました:set autoindent。このようなものを私が望むとおりに機能させる方法はおそらくあるでしょうが、それは十分に面倒で手間がかかるので、私は気にすることはできません. 私はautoindent過去 20 数年間、問題なく仕事をしてきましsmartindentた。

フアン、助けてくれてありがとう。信じられないかもしれませんが、かなり役に立ちました。

ただし、これをフォローアップしているときに、他にもいくつかの優れたコマンドを発見しました。

>i}
>a}

これらは、現在のコード ブロックを右シフトします。' i' バージョンは閉じ括弧ではなく本体をインデントし (私の好みのスタイル)、' a' バージョンは閉じ括弧をインデントします (仕事で必要なバージョン)。

%また、シェルで実行されるコマンドの ' ' に修飾子を適用することもできます。

:make %:r.o

%:rこれにより、現在のファイル名 (つまり ' ')の 'ルート' で make が実行され、その後に ' .o' が続きます。または、言い換えれば、私が編集している場合somefile.c、これが実行されmake somefile.oます。

于 2008-12-22T07:01:01.873 に答える
2

示唆する前の答え:

:inoremap # X^H#

優れています。これは、「:help smartindent」の VIM ドキュメントで提案されている回答です。^H は CTRL-V CTRL-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.
于 2010-02-24T04:47:45.447 に答える
1

はい、それは非常に迷惑です。smartindentは、実際にはCのような言語専用です。言語に基づいて適切なインデントを有効にする方法については、 http ://www.pixelbeat.org/settings/.vimrcをご覧ください。

于 2009-01-25T01:16:50.397 に答える
1

.vimrc に次の行がありますが、問題は見当たりません。

set smartindent
inoremap # X^H#

この 2 行の後にautoindentを設定していましたが、効果がないようです。

于 2008-12-22T07:33:00.780 に答える