vimを長らく使ってるのに矢印キーを使う軟弱者にファイルを編集させない

いつまで経ってもカーソル操作を矢印キーでやってしまう軟弱者にファイルを編集する資格なんて無かった

nnoremap <Up>    :q!<CR>
nnoremap <Down>  :q!<CR>
nnoremap <Left>  :q!<CR>
nnoremap <Right> :q!<CR>
inoremap <Up>    <ESC>:q!<CR>
inoremap <Down>  <ESC>:q!<CR>
inoremap <Left>  <ESC>:q!<CR>
inoremap <Right> <ESC>:q!<CR>
143contribution

キビシイ:cold_sweat:

0contribution

あるある

2contribution

挿入モードで移動するときはどうしてます? 挿入モードで< c-o >h, < c-o >j, < c-o >k, < c-o >l で移動できる以外にコツがあれば教えてください。 < C-o > hで出来ますが、かなり遅いので以下をvimrcに追加したことがあるのですが、なるべくvim自体の機能を使いたいのでお願いします。

inoremap < C-S-h > h
inoremap < C-S-j > < C-o >j
inoremap < C-S-k > < C-o >k
inoremap < C-S-l > < C-o >l

2contribution

@tf2014 hjklで移動するのはちょっと遅いですね。ft,.wbe等のほうが早いでしょう。それらを使えば、ただ<C-[>でノーマルモードに戻って速く移動できます。一字以上の移動をするときには、hjklを使わなければいいでしょう。vimgolfを知っていますか?

2contribution

@tssund93 さん

ありがとうございます。vimgolfについて検索してみました。楽しみながら、勉強になりそうです。

110contribution

@tf2014 さん

おそらく挿入モードでhjklによるカーソル移動を許してしまうと、
それは本質的には矢印キーを禁止した意味がなくなると思います。(記事内の禁止方法は極端ですが)

vimというよりviの思想に沿うのであれば、カーソル移動時は必ずノーマルモードに移動し、適切なカーソル移動後に挿入モードにまた戻すというのが自然かと思われます。

@tssund93 さんも仰ってますが、vimでは狙った所に適切にカーソル移動してくれる機能が標準で豊富に用意されています。hjklはほんとうに1文字移動したい時にのみ制限して最小のキー数で済ませるのがvimの醍醐味ですね。

ちなみに挿入モードでの矢印キーは、内部的にはノーマルモードに移行してhjklを入力して挿入モードに戻るという一連の操作になるみたいです。

2contribution

@Sa2Knight さん、

詳しい説明ありがとうございます。要するに、「挿入モードで移動するな」ということですね。例えば、

int Add(int a, int b){
return a + b;
}

を書くとき、私は()や{}の閉じ忘れがないように、Add()とかいて←を押して()の中に入ってから「int a, int b」と書くのですが、

  1. i int Add()
  2. < ESC> h
  3. i int a, int b
  4. < ESC> l
  5. i {}
  6. < ESC> h
  7. ...

となり、左に一字戻るだけで< ESC>を押すのがすごく不便な感じがするのです。

困ったことに、< C-o> hだとなぜか()の左側にカーソルが行ってしまったり。

試行錯誤してみます。

143contribution

@tf2014

私はこうしています。

  1. i int Add()
  2. <esc>i int a, int b
  3. <esc><s-a> {}
  4. <esc>i<cr>return a+b;<cr>
  5. <esc>

ちなみに、私はjk<esc>にマッピングしているので、実際にはあまりホームポジションからは動かなくてストレス少ないです。
つまり、.vimrcには下記を設定しています。
inoremap jk <esc>

例えば、挿入モードで1文字戻るには jki, 行末へ移動するにはjk<s-a>です。

110contribution

@tf2014 さん
@kota9 さん

記事の本筋とはズレますが、私はプラグイン(Townk/vim-autoclose)を導入して、
括弧、コーテーション、do/end、if/fi(endif)など、対になるモノは自動入力されるようにしています。
まっさらのvimだったら確かに迷いますね‥‥。まっさらなら妥協して矢印キー使うかもしれません(笑)

2contribution

@kota9さん、

勉強になりました。まさにvimgolf。最初にステップ2の< ESC>i と読んだとき「< esc>hiの間違いだな。」と先入観をもって読んでしまったのですが、よく考えてみるとiはカーソルの前に挿入ですね。これで1打 節約できます。これは完全に多用するでしょう。これは勉強になりました。

@Sa2Knight さん、

Townk/vim-autocloseを検索してみたいと思います。けど、当分は使わないで、< ESC>i と kota9さんの書いた、inoremapで自分に合ったコンビネーションを探したいと思います。