teratail header banner
teratail header banner
質問するログイン新規登録

質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.30%
Vim

VimとはUnix / Linux 系のOSに標準搭載されているターミナル上で動くテキストエディタです。

コマンド

コマンドとは特定のタスクを行う為に、コンピュータープログラムへ提示する指示文です。多くの場合、コマンドはShellやcmdようなコマンドラインインターフェイスに対する指示文を指します。

意見交換

7回答

337閲覧

Vimのよく使うコマンド、おすすめはありますか?

tinman

総合スコア0

Vim

VimとはUnix / Linux 系のOSに標準搭載されているターミナル上で動くテキストエディタです。

コマンド

コマンドとは特定のタスクを行う為に、コンピュータープログラムへ提示する指示文です。多くの場合、コマンドはShellやcmdようなコマンドラインインターフェイスに対する指示文を指します。

0グッド

0クリップ

投稿2025/06/18 00:33

編集2025/06/18 00:34

0

0

背景

Vimを使い始めて少し経つのですが、いまだに基本的な操作で手間取ってしまうことが多く、作業効率が上がらないと感じています。ネットで調べながら色々なコマンドを試してはいるのですが、数が多くてどれを覚えたらいいのか、どんなコマンドが便利なのかがイマイチ掴めていません。

現状

カーソル移動や簡単な編集はできるようになったのですが、もっと効率的にファイル編集や操作ができるようになりたいです。

意見交換したいこと

そこで、Vimを使い慣れている方に質問なのですが、現場でよく使うコマンドや、おすすめの便利なコマンドがあれば教えていただけないでしょうか?

具体的に、下記のような操作をスムーズに行うためのコマンドがあれば特に助かります。

  • 複数行の削除やコピー
  • ファイル内の特定の文字列を検索・置換
  • 行頭、行末への移動
  • 複数ファイルの同時編集
  • ウィンドウ分割

もちろん上記以外にも、便利なコマンドがあれば些細なことでも構いません。

その他

できれば、コマンドの説明だけでなく、具体的な使用例も合わせて教えていただけると嬉しいです。
例えば、「5ddでカーソル行から5行削除」のような使い方です。

Vimを使いこなせるようになりたいので、ぜひ皆さんの知恵をお貸しいただきたいです!

よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

回答7

#1

TakaiY

総合スコア14431

投稿2025/06/18 01:38

下記のような操作をスムーズに行うためのコマンドがあれば

上げられているような操作については検索すればすぐに出てくると思うのですが、何が知りたいのでしょうか?

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

#2

shiketa

総合スコア4133

投稿2025/06/18 02:46

esc :q!
これをわすれると、やめたくてもやめられない。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

#3

uvim

総合スコア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 などを追加してくれる
      など

参考:
Vimのテキストオブジェクトについてまとめた

ファイル内の特定の文字列を検索・置換

ファイル内の検索についてはほとんどの場合 /検索ワード を使います。
置換については、対象を検索してから cgn を使うことが多いです。
参考: 中級 Vim 操作

行頭・行末への移動

  • 単に行頭へ移動する場合は 0 、インデントの直後に移動する場合は ^ を使います
  • 行末へ移動する場合は $ ですが、行末に移動してすぐに追記したい場合は $i と入力する代わりに A と入力します

複数ファイルの同時編集

ウインドウ分割

これも色々ありますが、私は <C-W> から始まるコマンドを使うことが多いです。

  • <C-W>n または :new : 現在のウインドウの上に新しいウインドウを開く
  • <C-W>v または :vsplit : 現在のウインドウを左右に分割する
  • <C-W>o 現在のウインドウを残して他のウインドウをすべて閉じる
  • など

おわりに

急に長文での回答となってしまい、もしかしたら威圧してしまったかもしれません。
そんなつもりはないんですが、ぜひVimを楽しんでください。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

#4

yambejp

総合スコア117816

投稿2025/06/18 04:07

vimというかviクローンはコマンドラインエディタとしては覚えておくにこしたことはないですね
以前はelvisのほうが優勢だったこともあったような気もしますが

#2

すべてのアプリは終わらせ方を覚えるところからですよね

:q!:wqは多用するでしょう。失敗したなとおもったら閉じずに:e!も必要ですね。挿入モード「aAiI」の使い分けと「ESC」での解除も最低限必要です。
行移動「:数字」「:$」とヤンク+ペーストは必須です。

あとは置換はよくつかうので:%s/元文字/後文字/gと戻す「u」は必要でしょう

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

#5

otn

総合スコア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でノーマルモードに戻ります)。

(注※)
同じ事をやるのに複数のやり方があったりしますが、「それをやるためにこれが一番キーイン回数が少ない」を目指して沢山の機能を覚えるのもいいし、「同じ事が、基本的なこの機能とこの機能の組み合わせで出来る」でやるのもいい。思い出してる間に指を動かした方が早いかも知れないし。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

#6

cametan

総合スコア63

投稿2025/06/18 17:26

Cream?(違

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

#7

katsuko

総合スコア3592

投稿2025/06/19 00:12

ぶっちゃけ、よく使うコマンドを列挙しても全部覚えきれないと思いますが、たまに「お、これは便利そうだ」というものを見つけて、使い始めたら手放せなくなった、ということもよくあるんですよね。
なんで、自分も適当に挙げておきます。

wb

単語単位での移動。
これだけでもだいぶタイプ量が減るので、hjkl の次に覚えるべきコマンドだと思ってます。

HML

ウィンドウの最上部、中心部、最下部に移動。
別にそこに移動したい時に使う、というよりも、下から一行づつ移動するよりも一番上から下に移動したほうが早そうだ、という時によく使います。

%

対応する括弧に移動。
括弧の閉じ忘れがないか確認するのによく使います。

0$

行頭、行末へ移動。

ywdwy$d$y%d%

ヤンク/デリート(コピー/カット)コマンドは、後ろに移動コマンドを指定すると、移動した部分をヤンク・デリートするので、上記で説明した移動コマンドと併用すると便利。

yiBdiB

カーソル行の「{}」の中の内容をヤンク・デリートする。

csharp

1 { 2// ここから 3 .... 4// ここまで 5 }

同様に yaBdaB という、括弧まで含めてヤンク・デリートするコマンドがありますが、括弧の前のインデントまでは対象にならないので、意外と不便なので使ってないです。

名前付きレジスタ

ヤンク・デリートすると、レジスタと呼ばれる、いわゆるvim内部のクリップボードらしきものに保存されますが、続けてコマンドを実行すると上書きされます。
"ayy 」というように名前(先の「 a 」の部分)を明示的に指定する事によって、他のヤンク・デリートコマンドに上書きされないで保存することができます。

ペーストする際には、同様に「 "ap 」と名前を指定します。
また、インサートモード中でも「 <CTRL+R>a 」とするとペーストできます。

更に、「 "+yy 」というように名前を「 + 」にすると、システムのクリップボードに保存することもできます。(ペーストも同様)
ただし、Windowsやデスクトップ環境など、「システムのクリップボード」がある場合のみです。

*

カーソルにある単語を検索します。
例えば、「 hoge 」というところにカーソルがある状態で「 * 」を押すと、「 /\<hoge\> 」を実行したと同様になります。

ファイル名入力

コマンドモード( : から始まるコマンド)では、タブキーを押すと、単語の補完(該当する単語があれば、自動的に入力してくれる)機能があります。
特に、「 :e <ファイル名> 」を実行する際に、ファイル名を全てタイプしなくても、ある程度はタブキーを押して補完入力すると便利です。
ただ、デフォルトの補完機能は使いづらいので、自分は「 :set wildmode=list:longest 」を設定しておいて、bashと同様の機能にしています。

また、シェルと同様の環境変数置換も使えるので、よく使う、かつ根が深いフォルダはあらかじめ環境変数に登録しておいて、「 :e $HOGE/piyo.py 」というように簡単に入力できるようにしておきます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

この意見交換はまだ受付中です。

会員登録して回答してみよう

アカウントをお持ちの方は

関連した質問