# を押すとインデントが戻って行頭にカーソルが行ってしまうのを避けたい
問題点
#を押すとインデントが戻って行頭にカーソルが行ってしまう>>とかでもインデントされてくれない- どこの設定でそうなっているかを確認して、オフにしたい
→ 問題点の整理: どのタイミングで起きるか
| 操作 | 動作 |
|---|---|
行頭から 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?
→ このように出たとする
| 表示例 | 意味 |
|---|---|
cindent | On になっている(Off だと nocindent と出る) |
cinkeys=0{,0},0),0],:,0#,!^F,o,O,e | 0# が含まれている |
cinoptions= | 記号毎のインデント幅は特にカスタマイズされていない |
→ cindent が On となっていて、かつ cinkeys に 0# が設定されている
→ これが原因の可能性あり
この場合の対策
- 対策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 などより後に書くこと。
以下広告