97
84

More than 3 years have passed since last update.

Vimを一ヶ月使った感想

Last updated at Posted at 2021-05-27

前書き

Vimについてずっと勉強したかったのですが、
最近にやっと勇気を出てキャッチアップして、
VSCとIdea両方にVimのプラグイン・エクステンションを入れて、
一ヶ月Vimのみのプログラミングを挑戦してみました。

結論を先に言いますと、
最初は確かにいろいろ苦労したけど、
でも使えば使えるほど手ごたえを感じていて、
「めっちゃ便利だ!」というレベルほど上手にはなってないだけど、
これからずっとVimを利用して開発してもそんなに抵抗感がないなぐらいの実感です。

今回の記事では、
自分がこの一ヶ月間でVimを使ってみて、
どんなコマンドを一番使っているか、
統計的にな意味合いで「どんなコマンドからVimを勉強すればよいか?」、
のヒントやアドバイスになれればいいなと思います。

カーソル動く系

使用頻度(高):hjkl

  • h:←
  • j:↓
  • k:↑
  • l:→

最初はちょっと「どれがどれだっけ」を考えながらやってたんですが、
一ヶ月も経ったので、
今は思わず自由自在に←↓↑→をコントロールできます。

使用頻度(高):w

lで文字ごとに一個一個右に移動させるのはだるいので、
wが方が早いですね。

単語毎にカーソルを右方向に移動させる。

使用頻度(中):e

基本的にwを使う場合が多いのですが、
wで行き過ぎた場合に、eを使います。

単語ごとに単語の最後の文字に移動させる。

使用頻度(やや高):b

wの逆ですが、hで一個一個移動させるのもだるいので、
だるいと感じたらbを使い始めるイメージです。

単語ごとに前の単語に移動させる。

使用頻度(中):gg と G

ログを見るときとか、一番下の行に何かを追加した場合に、gg/Gを利用する場合がありますね。

  • gg: 一番上に
  • G:一番下に

使用頻度(中):数字G

特定の行に行きたい場合にこれを使います。

でも大体のIDEはCtrl + Gで同じ機能をサポートしているので、
Ctrl + Gを使った方が便利の気がします。

でもVimのエクステンションやプラグインを入れる場合に、元のCtrl + Gが使えなくなるので、
手動でVim側のCtrl + Gを外す必要があります。

使用頻度(中):{ と }

jjjjjjjをずっと打つことも面倒くさいし、10jとか42jとかもあるけど、
{}はやはりたまに使います。

段落ごとにカーソルを移動させる。

  • {:上の段落
  • }:下の段落

使用頻度(中):N / n

前・次の検索結果に移動させる。.と併用する場合が多いです。

  • N:前に
  • n:次に

使用頻度(中):0w

これは便利かもしれませんが、ちょっと0が若干遠いので
行の先頭の単語に移動させる。

もし先頭に空白が存在していない場合に、0だけで十分です。

if (a) {
  const b = 42;
  //    ↑ cursor is here
}

// 0wを押した後

if (a) {
  const b = 42;
//↑ cursor will go to here
}

I + Esc + lと一緒。

使用頻度(中):-

一個上の行の先頭(空白を全部飛ばす)に移動させる。

if (a) {
  const b = 42;
  //    ↑ cursor is here
}

// -を押した後

if (a) {
 // cursor will go to here
  const b = 42;
}
if (a) {
  const b = 42;
  const c = b + 1;
  //    ↑ cursor is here
}

// -を押した後

if (a) {
//↓ cursor will go to here
  const b = 42;
  const c = b + 1;
}

使用頻度(高):*

カーソル下の文字を検索できます。
特に関数や変数に遷移したい場合に結構便利ですね。

//     ↓ cursor is here
const foo = () => {};
foo();

// *を押した後

const foo = () => {};
foo();
 // cursor will go to here

-*@Pseudonymさんの提供です、ありがとうございます!

使用頻度(中):$

行の最後に移動する場合に、基本的に何かを挿入したいケースが多いので、
Aを使う方がおおですね。
また$を使いたい場合でも、A Escを使う場合が多いです。

カーソルを行の最後に移動させる。

使用頻度(中):t文字 / f文字

  • t文字:文字の一個前のポジションにカーソルを移動させる。
  • f文字:文字のポジションにカーソルを移動させる。
const a ='hello world'
//    ↑ cursor is here

// tlを押した後

const a = 'hello world'
//          ↑ cursor will go to here
const a ='hello world'
//    ↑ cursor is here

// foを押した後
const a = 'hello world'
//             ↑ cursor will go to here

// もう一回fo
const a = 'hello world'
//                ↑ cursor will go to here

ヒント: なるべく頻度の低い文字でジャンプ。これで操作の回数を減らせます。

モード切り替え

使用頻度(高):Esc

なるべくINSERTモードを入らないように、
何かをインプットした後に、すぐESCを押す習慣ができました。

基本的にNORMALモードにするべきです

使用頻度(高):i

それはそうだね、何かを挿入したいときに、iでINSERTモードに入るわけですね。

使用頻度(中):I

カーソルを行の先頭に移動させ、INSERTモードに入る。

0iと一緒。

使用頻度(やや高):a

iとちょっと似ているのですが、たまにはaiを使い分けられると気持ちが良くなります。

カーソルの一個後ろの文字にINSERTモードに入る。

i→と一緒。

使用頻度(中):A

これはあまり目立たないだけど、以外と高い頻度で利用しています。
行の最後にカーソルを移動させ、INSERTモードに入る。

$aと一緒。

使用頻度(高):o

改行したいときに、新しい行を追加したい場合とか結構あるので、
よく活用しています。

A+Enterと一緒。

使用頻度(中):O

たまには前の行に何かを挿入したい場合にこれを使いますね。

kA+Enterと一緒。

NORMALモードのままの操作

使用頻度(高):dd

行を削除することが結構あるので、めっちゃ使っています。

現在行を削除する。

使用頻度(やや高):D

これも以外と使っています。
特に=にカーソルを移動させて、D=の右側を全部削除するとかのケースの場合。

const a = 'some string here';
//         ↑ cursor is here

// Dを押した後

const a = '
// 上記になる

現在のカーソルの右側全てを削除する。

d$と一緒。

使用頻度(高):dw

これは一番使われるケースなので、当然:高です。
単語一個削除する。

使用頻度(高):dt文字 と df文字

やっぱりdwdwdwdwは面倒くさいと思う時があるので、
例えば:

const greeting = 'Hello World!!';
// cursor is here ↑

// dwdwdwを押した後
const greeting = '
const greeting = 'Hello World!!';
// cursor is here ↑

// dt'を押した後
const greeting = '';
const greeting = 'Hello World!!';
// cursor is here ↑

// df!を押した後
const greeting = '!';

ちょっと練習が必要ですが、
慣れてしまうと意外と使いやすいです。

  • dt + 文字: それぞれ特定の文字まで
  • df + 文字:特定の文字(含む)まで

を全部削除する。

使用頻度(やや高):C

Dと似ていますが、現在のカーソルの右側全てを削除する。また、INSERTモードに入る。

Daと一緒。

使用頻度(高):cw

特に変数の名前を変更したい場合によく利用してます。
dwと似ていますが、現在の単語を削除して、INSERTモードに入る。

dwiと一緒。

使用頻度(やや高):ct文字 と cf文字

dtdfと似ているのですが、該当の単語を削除してINSERTモードに入る。

使用頻度(中):v

まあこれが便利ですが、何かを選択して次にコピーとか、削除とか、修正とかしたい場合に利用することが多いですが、
私はあまり利用していないですね。

VISUALモードに入る。

使用頻度(高):V

意外とこれがよく使っています。
行ごとに選択する。

例えば複数行を削除したい場合に、
私はddddddで三行を削除するのではなく、
Vjjdを利用することが多いですね。

なんか何かを選択してから操作するのほうが安心ですね。

使用頻度(高):.

よくある利用例としては、cwで単語を変更しました、
別のところの同じ単語があれば、それにフォーカスして.を押すと、
その単語も同じように変更できます。

一個前の操作をリピートする。

dddddd = dd..

使用頻度(中):~

変数名のcamelCaseがちゃんとなっていない場合にこれを使います。
わざわざINSERTモードに入って、削除して、新しい文字を入力して、とかの操作をしなくても済むので。

大文字・小文字に変更するコマンドです。

使用頻度(中):/キーワード

Ctrl + Fと同じイメージですね。
IDEのCtrl + Fは便利なので、あまり/を利用していないですが、.と併せて利用すると以外と便利です。

例えば:
n -> . -> n -> .
というイメージで、次にマッチした文字列に行って操作をリピートする、また次に行って操作をリピートするとかです。

使用頻度(高):x

dwでうまく意図通りに削除してくれない場合に、xxxxを連打します。
連打にストレスを感じたら、vでVISUALモードに入って削除したい文字列をwlを併せて選択して削除しましょう。

使用頻度(高):u

誰だってミスするのでこれは高でしょう。
一個前の操作を取り消すコマンドです。

使用頻度(高):Ctrl + r

誰だってミスをさらにミスするのでこれも高でしょう。

uの操作を取り消すコマンド?たぶんそういうイメージです。

使用頻度(中):s

cwを使うケースが多いので、sをあまりって感じですね。
カーソルの文字or選択した文字列を削除してINSERTモードに入る。

使用頻度(中):yw

たまには単語をコピーしたいですが、
でもちょうど単語にフォーカスしていないと、わざわざ単語にカーソルを移動させるのも面倒くさいので、
あまり利用していないですね。

単語をコピーする。

使用頻度(高):yy

これは結構利用しています。
一行をコピーする。

使用頻度(高):p

正しくペーストするためにカーソルのポジションを正しくなってないと、
ペーストが意図通りにならないことをさんざん経験しました。(単語の最後の文字以前にペーストしてしまったとか)
皆様同じような悩みがありますかね?
コピーしたものをペーストする。

// コピーした文字列:world
const a ='hello'
//             ↑ cursor is here
const a = 'hello'world

//pを押した後

const a ='hello'
//            ↑ cursor is here
const a = 'helloworld'
97
84
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
97
84