背景
Vimを使い始めて少し経つのですが、いまだに基本的な操作で手間取ってしまうことが多く、作業効率が上がらないと感じています。ネットで調べながら色々なコマンドを試してはいるのですが、数が多くてどれを覚えたらいいのか、どんなコマンドが便利なのかがイマイチ掴めていません。
現状
カーソル移動や簡単な編集はできるようになったのですが、もっと効率的にファイル編集や操作ができるようになりたいです。
意見交換したいこと
そこで、Vimを使い慣れている方に質問なのですが、現場でよく使うコマンドや、おすすめの便利なコマンドがあれば教えていただけないでしょうか?
具体的に、下記のような操作をスムーズに行うためのコマンドがあれば特に助かります。
- 複数行の削除やコピー
- ファイル内の特定の文字列を検索・置換
- 行頭、行末への移動
- 複数ファイルの同時編集
- ウィンドウ分割
もちろん上記以外にも、便利なコマンドがあれば些細なことでも構いません。
その他
できれば、コマンドの説明だけでなく、具体的な使用例も合わせて教えていただけると嬉しいです。
例えば、「5ddでカーソル行から5行削除」のような使い方です。
Vimを使いこなせるようになりたいので、ぜひ皆さんの知恵をお貸しいただきたいです!
よろしくお願い致します。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答7件
#1
総合スコア14431
投稿2025/06/18 01:38
下記のような操作をスムーズに行うためのコマンドがあれば
上げられているような操作については検索すればすぐに出てくると思うのですが、何が知りたいのでしょうか?
#3
総合スコア3
投稿2025/06/18 03:11
編集2025/06/18 03:31「使いこなす人たちが便利そうに使っている様子を垣間見てモチベーションを掴みたい」ということなのかなと理解しました。具体はあくまでも例ですよね。
Vimの編集コマンドの多くは「オペレータ(どんな操作をしたいか)」と「テキストオブジェクト(操作対象の指定)」や「モーション(移動先の指定)」を組み合わせてできています。
たとえばカーソルの下の単語を削除したいときはオペレータ d
とテキストオブジェクト iw
というように。
私なりにオススメしたいのは、闇雲にコマンドを覚えるよりは「テキストオブジェクト (:help text-objects
)」や「モーション (:help motion
)」を色々とあさっては操作してみるのが良いかなと思います。
Vimほどに他と違う体系のものを学ぶときには「◯◯をしたい」という目的ベースだと思いもよらぬ機能が隠れていたりするので、
目的からのトップダウンではなく、Vim内のヘルプ(:help 某
とコマンドを入力すると表示されるアレや、vim-jpの方が有志で翻訳しているサイト)を読みながらボトムアップで機能を探して使ってみると意外な便利さに気づく、ということがよくあります。
しかし、これだけ色々あると機能が多くて覚えきれない!というのもわかります。
モチベーション維持のためには「実践Vim」のような魂の入った書籍を読んで尻を叩いてもらうのも良いかもしれません。
また、これらを無理に使うプレッシャーを感じる必要はなく一旦 「dd
の連発で削除する」としても良いとは思います。
VSCodeなどで、トリプルクリックすれば段落を一度に選択できるからといって、それを使わずにShift+カーソルやD&Dで選択したとしても誰も怒らないように。
具体例への回答
「複数行の削除(オペレータ d
)」
対象によって色々あります。
- 現在の行とすぐ下の行を同時に削除する:
dj
(モーションj
:help j
) - 現在の行とすぐ上の行を同時に削除する:
dk
(モーションk
:help k
) - 現在の行から3行下まで削除する:
d3j
(モーションj
:help j
に[count]をつけたもの) - パラグラフ(空白行で挟まれた領域)を削除する:
dip
(テキストオブジェクトip
;:help ip
) - HTMLタグに囲まれた領域をタグごと削除する:
dat
(テキストオブジェクトat
;help at
) - 波括弧に囲まれた領域の中身だけ削除する:
di{
(テキストオブジェクトi{
;help i{
)
他にも、テキストオブジェクトやモーションを増やすプラグインもたくさんあります。
- kana/vim-textobj-entire
- 「バッファ全体」を表すテキストオブジェクト
ap
を追加してくれる - ファイル全体をヤンク(コピー)したいときに
yap
などとできて便利
- 「バッファ全体」を表すテキストオブジェクト
- coachshea/vim-textobj-markdown
- Markdownに含まれるコードブロックのオブジェクト
if
などを追加してくれる
など
- Markdownに含まれるコードブロックのオブジェクト
ファイル内の特定の文字列を検索・置換
ファイル内の検索についてはほとんどの場合 /検索ワード
を使います。
置換については、対象を検索してから cgn
を使うことが多いです。
参考: 中級 Vim 操作
行頭・行末への移動
- 単に行頭へ移動する場合は
0
、インデントの直後に移動する場合は^
を使います - 行末へ移動する場合は
$
ですが、行末に移動してすぐに追記したい場合は$i
と入力する代わりにA
と入力します
複数ファイルの同時編集
:grep
コマンドとqfreplaceを使うことが多いです。- 参考: Ack.vim と qfreplace で気軽に複数ファイルの一括置換
- 補足: Ack.vimはなくとも
:grep
がそのまま使えます
- 補足: Ack.vimはなくとも
ウインドウ分割
これも色々ありますが、私は <C-W>
から始まるコマンドを使うことが多いです。
<C-W>n
または:new
: 現在のウインドウの上に新しいウインドウを開く<C-W>v
または:vsplit
: 現在のウインドウを左右に分割する<C-W>o
現在のウインドウを残して他のウインドウをすべて閉じる- など
おわりに
急に長文での回答となってしまい、もしかしたら威圧してしまったかもしれません。
そんなつもりはないんですが、ぜひVimを楽しんでください。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
#5
総合スコア86329
投稿2025/06/18 14:53
そもそもvimを使う目的によって、「どこまで勉強すべき?」というのが違ってくるかと思います。
例1:本格的にプログラミングをしている(or するつもりだ)が、VSCodeのようなGUIエディターでなく、端末上でも使える等の理由でvimで本格的にプログラミングしたい。
例2:vimを使うのは、sshでサーバーにログインして端末エミュレータ上で編集する必要があるから。設定ファイルや、ちょっとしたシェルスクリプト、コマンドの出力結果などを効率的にテキスト編集したい。
例1であれば、最終的には https://vim-jp.org/vimdoc-ja/ 等のドキュメントに一通り目を通す(「これは自分には不要」と思う箇所は読み飛ばしでOKですが)必要があるかと思います。さらに各種プラグインの導入ですね。
ニーズは、おそらく例2に近いのかなと思いますので、その場合には、一般ユーザーが作ったまとめやチートシートに載っているレベルで十分な気がします(下記注※)。ただし、丸暗記だと効率が悪いし、頭が発散するので、uvimさんのアドバイス通り、「vimの基本」というか、「オペレーター/テキストオブジェクト/モーションとは何か」を把握した上での事になるかと思います。
あと、exコマンド(:v/^#/s/foo/bar/gp
とか)にどれだけ手を出すか。
もし、連続してexコマンドを実行するなら、ノーマルモードからQ
でexモードに移行すると、都度:
を入れなくても良いし、画面も見やすいです。
Q
を押すと「戻りはvisual
コマンドで」という旨のメッセージが出るはずなので、戻り方は覚えなくてもいい(他のexコマンドと同じく短縮形が使えるのでvi
でノーマルモードに戻ります)。
(注※)
同じ事をやるのに複数のやり方があったりしますが、「それをやるためにこれが一番キーイン回数が少ない」を目指して沢山の機能を覚えるのもいいし、「同じ事が、基本的なこの機能とこの機能の組み合わせで出来る」でやるのもいい。思い出してる間に指を動かした方が早いかも知れないし。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
#7
総合スコア3592
投稿2025/06/19 00:12
ぶっちゃけ、よく使うコマンドを列挙しても全部覚えきれないと思いますが、たまに「お、これは便利そうだ」というものを見つけて、使い始めたら手放せなくなった、ということもよくあるんですよね。
なんで、自分も適当に挙げておきます。
w
、b
単語単位での移動。
これだけでもだいぶタイプ量が減るので、h
、j
、k
、l
の次に覚えるべきコマンドだと思ってます。
H
、M
、L
ウィンドウの最上部、中心部、最下部に移動。
別にそこに移動したい時に使う、というよりも、下から一行づつ移動するよりも一番上から下に移動したほうが早そうだ、という時によく使います。
%
対応する括弧に移動。
括弧の閉じ忘れがないか確認するのによく使います。
0
、$
行頭、行末へ移動。
yw
、dw
、y$
、d$
、y%
、d%
ヤンク/デリート(コピー/カット)コマンドは、後ろに移動コマンドを指定すると、移動した部分をヤンク・デリートするので、上記で説明した移動コマンドと併用すると便利。
yiB
、diB
カーソル行の「{}
」の中の内容をヤンク・デリートする。
csharp
1 { 2// ここから 3 .... 4// ここまで 5 }
同様に yaB
、daB
という、括弧まで含めてヤンク・デリートするコマンドがありますが、括弧の前のインデントまでは対象にならないので、意外と不便なので使ってないです。
名前付きレジスタ
ヤンク・デリートすると、レジスタと呼ばれる、いわゆるvim内部のクリップボードらしきものに保存されますが、続けてコマンドを実行すると上書きされます。
「 "ayy
」というように名前(先の「 a
」の部分)を明示的に指定する事によって、他のヤンク・デリートコマンドに上書きされないで保存することができます。
ペーストする際には、同様に「 "ap
」と名前を指定します。
また、インサートモード中でも「 <CTRL+R>a
」とするとペーストできます。
更に、「 "+yy
」というように名前を「 +
」にすると、システムのクリップボードに保存することもできます。(ペーストも同様)
ただし、Windowsやデスクトップ環境など、「システムのクリップボード」がある場合のみです。
*
カーソルにある単語を検索します。
例えば、「 hoge
」というところにカーソルがある状態で「 *
」を押すと、「 /\<hoge\>
」を実行したと同様になります。
ファイル名入力
コマンドモード( :
から始まるコマンド)では、タブキーを押すと、単語の補完(該当する単語があれば、自動的に入力してくれる)機能があります。
特に、「 :e <ファイル名>
」を実行する際に、ファイル名を全てタイプしなくても、ある程度はタブキーを押して補完入力すると便利です。
ただ、デフォルトの補完機能は使いづらいので、自分は「 :set wildmode=list:longest
」を設定しておいて、bashと同様の機能にしています。
また、シェルと同様の環境変数置換も使えるので、よく使う、かつ根が深いフォルダはあらかじめ環境変数に登録しておいて、「 :e $HOGE/piyo.py
」というように簡単に入力できるようにしておきます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。