1. ホーム
  2. python

Vim は Python コメントのインデントを自動的に削除する [重複] [重複] [重複].

2023-10-17 21:28:26

質問

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 (これは私がよく使うものです)では、あなたが望むような動作をします。

更新しました。のドキュメントから smartindent :

新しい行の最初の文字として '#' を入力すると、その行のインデントが削除され、'#' が最初の列に置かれます。 が取り除かれ、'#'が最初の列に置かれます。 次の行のインデント は次の行で元に戻ります。 これを望まない場合は、次のようにします。 mapping: ":inoremap # X^H#" ここで^HはCTRL-V CTRL-Hで入力します。 コマンドを使用する場合、'#'で始まる行は右シフトされません。 右へ移動しません。

ということのようです。


更新: 以下をわざわざ書く必要はないでしょう...。情報価値を高めるためにここに残しておきます。)

もし設定 nosmartindent を設定しても効果がない場合は、おそらく :set コマンドを使用して、Vim セッションで有効なすべての設定のリストを取得し、それをどこかに貼り付けることができるかもしれません ( パスティ おそらく) に貼り付けてください。私の記憶では、自動インデントに影響する他のオプションがいくつかあります。