Skip to main content

# を押すとインデントが戻って行頭にカーソルが行ってしまうのを避けたい

問題点

  • # を押すとインデントが戻って行頭にカーソルが行ってしまう
  • >> とかでもインデントされてくれない
  • どこの設定でそうなっているかを確認して、オフにしたい

→ 問題点の整理: どのタイミングで起きるか

操作動作
行頭から tab (または空白), # と順に打ったときo 戻らない
既にインデントの入っている行に i, a などで # を入力時x 戻ってしまう
オートインデントで、インデントの入った次の行に、# を入力時x 戻ってしまう

設定変えずにとりあえず回避する場合

  • Ctrl-v を押してから # を入力する
  • :set nostartofline

自分の場合の結論と方針(先に記載)

  • cindent, smartindent を無条件に On にしていたのが原因だった → .vimrc で設定するのをやめる
  • autoindent → こちらは無条件に On のまま。 今回の動作とは関係ない

ありうる原因1: cindent が On となっている

判別コマンド

vim
setlocal cindent?
setlocal cinkeys?
setlocal cinoptions?

→ このように出たとする

表示例意味
cindentOn になっている(Off だと nocindent と出る)
cinkeys=0{,0},0),0],:,0#,!^F,o,O,e0# が含まれている
cinoptions=記号毎のインデント幅は特にカスタマイズされていない

cindent が On となっていて、かつ cinkeys0# が設定されている

→ これが原因の可能性あり

この場合の対策

  • 対策1. 無条件に cindent を On にしているなら .vimrc 見直し(自分の例ではこれだった)
  • 対策2. #define などでインデント戻したくないなら cinkeys-=0# を設定(個人的には非推奨)

ありうる原因2: smartindent が On になっている

判別

vim
:setlocal smartindent?

この場合の対策

名前からは分かりづらいが、これは「Cっぽいインデント」をする設定。

cindent 同様、無条件に設定しているなら、それは Off にする

他に関係しそうな設定と注意点

上記に当てはまらず、問題が解決しない場合は、以下の設定を調べることにする。

vim
:verbose setlocal filetype?
:verbose setlocal cindent? smartindent? autoindent?
:verbose setlocal cinkeys? indentexpr? indentkeys?

※ verbose つけると、どこで設定されたかも含めて出るので便利

また、autocmd で これらの動作を変更する場合の注意点として、
filetype indent on, filetype plugin indent on などより後に書くこと。


以下広告