私はVimを使用していて、Pythonスクリプトを編集しています。
自動インデントは一般的にはかなりうまく機能しますが、新しい行を開始して「#」と入力してコメントを入力すると、Vimはその行のインデントを解除します。
たとえば、
def foo():
enterキーを押すと、Vimは適切にインデントします
def foo():
pass
ただし、pass
と入力する代わりに、#
と入力すると、自動的にインデントが解除されます
def foo():
# comment
class Thing():
def __init__(self):
pass
# comment line gets unindented all the way
私の.vimrcファイルは次のとおりです。なぜこれが起こっているのか誰か知っていますか?
set tabstop=4
set smartindent
set shiftwidth=4
set expandtab
set backspace=indent,eol,start
set scrolloff=3
set statusline=%f%m%r%h%w\ [%Y\ %{&ff}]\ [%l/%L\ (%p%%)]
set laststatus=2
smartindent
をオンに設定すると、Vimはあなたが説明したように動作しますが、nosmartindent
(私がよく使用するもの)を使用すると、Vimはあなたが好むように動作します。
更新:smartindent
のドキュメントから:
新しい行の最初の文字として「#」を入力すると、その行のインデントが削除され、「#」が最初の列に配置されます。次の行のためにインデントが復元されます。これが不要な場合は、次のマッピングを使用してください: ":inoremap#X ^ H#"、ここで^ HはCTRL-VCTRL-Hで入力します。 「>>」コマンドを使用する場合、「#」で始まる行は右にシフトされません。
それはそれのようです。
更新:おそらく次のことを気にする必要はありません...追加の情報価値のためにここに残しておきます。 ;-)
nosmartindent
を設定しても問題が解決しない場合は、:set
コマンド(パラメーターなし)を使用して、Vimセッションで有効なすべての設定のリストを取得し、どこかに貼り付けることができます( on Pastie おそらく)。私が覚えている限り、自動インデントに影響を与える他のいくつかのオプションがあります。
Michałの投稿ではsmartindentの機能について説明していますが、単にオフにするよりもはるかに優れた方法を実行できます。好みに合わせて設定することもできますが、Vimに適切なインデントを選択させることもできます。他のインデント設定の代わりにvimrcで以下を使用します。
filetype indent on
VimはPython用の適切なインデントプラグインを自動的に使用します。これは、#行のインデントを解除しないよりもはるかに優れています。ほとんどすべてが適切にインデントされている必要があります。
pythonファイルに対してのみオプションを試すことができます:
autocmd BufRead *.py inoremap # X<c-h>#<space>
なんらかの理由で、上記の動作はcindent
をオンにしたときに発生しました。オフにすると修正されました。上記の他の修正はどれも役に立ちません。