web-dev-qa-db-ja.com

最もよく使用されるvimコマンド/キープレスは何ですか?

私はTextmateからMacVimに切り替えようとしているRubyプログラミングで、VIMでできることの巨大なリストとそれらのためのすべてのキー入力を歩くのに苦労しています。 「テキストの挿入に「I」を、文字の後にテキストを追加するのに「a」を、行末にテキストを追加するのに「A」を使用できる、または...」と聞くのはうんざりです誰もが20種類すべてのキープレスを使用してテキストをナビゲートし、10程度のキーを使用してテキストの追加を開始し、18の方法で内部ブロックを視覚的に選択します。それともあなた!?

私の理想的なチートシートは、誰もが日常的にコードを書くために使用する30から40の最も使用されるキープレスまたはコマンドと、ルビイストが毎日使用する絶対不可欠なプラグインおよびそれらのための10の最も使用されるコマンドです。理論的には、いったんそれを取得し、TextmateのようにVIMに習熟すると、then何千もの学習を始めることができますmoreを効率的にする他のVIMコマンド。

または、間違った方法でVIMを完全に学習していますか?

100
Clinton Judy

これは、私が実際に定期的に使用するコマンドとともに、一度作成したヒントシートです。

参照資料

全般

  • ほぼすべてのコマンドの前に、繰り返し回数の数字を付けることができます。例えば。 5dd5行削除
  • <Esc>は、任意のモードからコマンドモードに戻ります
  • で始まるコマンドは、画面下部のコマンドラインで実行されます
  • :help任意のコマンドのヘルプ

ナビゲーション

  • カーソルの移動:←hjkl→
  • 言葉で:
    • w次の単語(句読点による); Wnext Word(スペースによる)
    • bBack Word(句読点による); Bback Word(スペースで)
    • eWordの終了(句読点による); EEnd Word(スペースで)
  • 行ごと:
    • 行の始まり; ^最初の非空白
    • $行末
  • 段落ごと:
    • {前の空白行; }次の空白行
  • ファイル別:
    • ggファイルの開始; Gファイルの終わり
    • 123G特定の行番号に移動
  • マーカー別:
    • mxset markx; 'xマークに移動x
    • '。最後の編集の位置に移動
    • ''ジャンプする前の最後のポイントに戻る
  • スクロール:
    • ^ F全画面表示; ^ B後方フルスクリーン
    • ^ D下半分の画面; ^ U半画面上
    • ^ E1行上にスクロールします。 ^ Y1行下にスクロール
    • zz中央のカーソル行

編集

  • u元に戻す; ^ Rredo
  • 最後の編集コマンドを繰り返す

挿入

すべての挿入コマンドは、<Esc>で終了し、コマンドモードに戻ります。

  • iカーソルにテキストを挿入します。 I行の先頭にテキストを挿入
  • aカーソルの後にテキストを追加します。 A行末の後にテキストを追加
  • o以下の新しい行を開きます。 O上記の新しい行を開く

変化

rおよびRを除くすべての変更コマンドは、<Esc>コマンドモードに戻ります。

  • r単一の文字を置き換えます。 R複数の文字を置換
  • s単一の文字を変更
  • cwWordを変更します。 C行末に変更。 cc行全体を変更
  • c<motion>は動きの方向にテキストを変更します
  • ci(括弧内の変更(詳細については テキストオブジェクト選択 を参照)

削除中

  • x文字を削除
  • dwWordを削除します。 D行末まで削除。 dd行全体を削除
  • d<motion>モーションの方向に削除します

カット&ペースト

  • yy行を貼り付けバッファーにコピーします。 dd行をカットしてペーストバッファに入れる
  • pカーソル行の下にバッファを貼り付けます。 Pカーソル行の上にバッファを貼り付け
  • xp2文字を交換します(x1文字を削除してから、pカーソル位置の後に戻すには)

ブロック

  • vビジュアルブロックストリーム; V視覚ブロック線; ^ V視覚ブロック列
    • ほとんどのモーションコマンドは、ブロックを新しいカーソル位置に拡張します
    • oはカーソルをブロックのもう一方の端に移動します
  • dまたはxブロックをペーストバッファーにカット
  • yブロックをペーストバッファにコピー
  • >インデントブロック; <ブロックのインデントを解除
  • gv最後の視覚ブロックを再選択

グローバル

  • :%s/foo/bar/gsubstitute 「foo」から「bar」へのすべての出現
    • %は、ファイル内のすべての行を示す 範囲 です
    • / gは、最初の行だけでなく、行のすべての出現を変更するフラグです

検索中

  • /前方検索; 後方検索
  • *カーソルの下のワードを前方検索します。 カーソルの下のワードを逆方向に検索
  • n次に同じ方向に一致。 N次の反対方向の一致
  • fx次の文字に進むx; Fx前の文字に戻るx
  • ;同じ方向に同じ文字に再び移動します。 同じ文字に反対方向に再び移動する

ファイル

  • :wファイルをディスクに書き込む
  • :w nameファイルをディスクにnameとして書き込む
  • ZZファイルをディスクに書き込んで終了する
  • :n新しいファイルを編集します。 :n!現在の変更を保存せずに新しいファイルを編集する
  • :qファイルの編集を終了します。 :q!変更を保存せずに編集を終了
  • :e同じファイルを再度編集します(vimの外部で変更された場合)
  • :e。ディレクトリエクスプローラー

  • ^ Wn新しいウィンドウ
  • ^ Wj次のウィンドウまで; ^ Wk前のウィンドウまで
  • ^ W _現在のウィンドウを最大化します。 ^ W =すべてのウィンドウを同じサイズにする
  • ^ W +ウィンドウサイズを大きくします。 ^ W-ウィンドウサイズを小さくする

ソースナビゲーション

  • 一致する括弧/括弧/波括弧、または言語モジュールがロードされている場合は言語ブロックにジャンプ
  • Gdカーソルの下のローカルシンボルの定義に移動します。 ^ O前の位置に戻る
  • ^]グローバルシンボルの定義にジャンプします(tagsファイルが必要です); ^ T前の位置に戻る(位置の任意のスタックが維持される)
  • ^ N(挿入モード)自動単語補完

ローカルの変更を表示

Vimには、ソース管理でベースバージョンから変更された行を簡単に強調表示できる機能がいくつかあります。これを簡単にする小さなvimスクリプトを作成しました: http://github.com/ghewgill/vim-scmdiff

275
Greg Hewgill

http://www.viemu.com/a_vi_vim_graphical_cheat_sheet_tutorial.html

これは、VIMを学習する上でこれまでで最高のものです。

19
Justin Thomas

素晴らしい vimのチートシート

enter image description here

11
RDL

Vimの組み込みチュートリアルを実行しましたか?そうでない場合は、コマンドラインにドロップして「vimtutor」と入力します。初期コマンドを学ぶのに最適な方法です。

Vimには信じられないほどの柔軟性とパワーがあり、ほとんどのvimユーザーと同様に、多くの新しいコマンドを学習し、古いコマンドを忘れて、それらを再学習します。組み込みのヘルプは、新しいものを学ぶために定期的に閲覧するのに適しています。

インターネットには、vimに関する優れたFAQとチートシートがいくつかあります。 vim + faqおよびvim + cheatsheetを検索することをお勧めします。 Cheat-Sheets.org#vim は、良いソースです Vim Tips wiki

4
the Tin Man

ほとんどの人がやっていることは、たぶん基本的なものから始めることです。 i、 yw、 yy、そして p。引き続き矢印キーを使用して移動したり、マウスでテキストを選択したり、メニューを使用したりできます。その後、何かが遅くなったら、より高速な方法を探して、徐々にコマンドを追加します。しばらくの間、1日に1つの新しいコマンドを学習すると、1週間に1つになります。 1か月でかなり生産的に感じるでしょう。 1年後にはかなり堅実なレパートリーが得られます。2〜3年後には、指が何をタイプしているのかを意識することすらできなくなります。 1993年にviを学びましたが、それでも1年に2つまたは3つの新しいコマンドを取得しています。

3
Karl Bielefeldt

@Greg Hewgillのチートシートはとても良いです。数か月前にTextMateから切り替えを開始しました。今では、TMを使用したときと同じくらい生産的になり、Vimのパワーに絶えず驚いています。

切り替え方法 です。たぶんそれはあなたにとって役に立つかもしれません。

Grosso modo、急進的な切り替えを行うのは良い考えだとは思いません。 Vimは非常に異なっており、漸進的に進むことが最善です。

そして、あなたのサブ質問に答えるために、はい、私は毎日iaIAoOのすべてを使用して挿入モードに入ります。確かに最初は奇妙に思えますが、しばらくの間はあまり考えません。

プログラミング関連のタスクに非常に役立ついくつかのコマンド:

  • rおよびRは文字を置き換えます
  • <C-a>および<C-x>は、数字を増減します
  • citは、HTMLタグのコンテンツとそのバリアントを変更します(catditdatci(など)
  • <C-x><C-o>,,にマッピング)オムニコンプリート用
  • <C-v>を使用した視覚的なブロック選択
  • 等々…

Vimの方法に慣れると、他のエディターまたはテキストフィールドでテキストを編集するときに、常にoまたはxを押すことが非常に難しくなります。

3
romainl

これを.bashrcに入れて、最後に編集したファイルを最後に編集した行でvimを開きます

alias vil="vim  +\"'\"0"
2
modesto

誰もが20種類すべてのキープレスを使用してテキストをナビゲートし、10程度のキーを使用してテキストを追加し、18の方法で内部ブロックを視覚的に選択することは想像できません。それともあなた!?

私がやります。

理論的には、いったんそれを取得し、Textmateの場合と同じようにVIMに習熟し始めると、他の何千ものVIMコマンドの学習を開始して、効率を上げることができます。

それが正しい方法です。基本的なコマンドから始めて、生産性を向上させるコマンドを選択します。 vimで生産性を向上させるためのヒントについては、 このブログ をフォローするのが好きです。

2
Jeff

tuxfiles.org はかなり良いチートシートを保持しています。コマンドを学習するためのポイントがいくつかあると思います。

  • チートシートを定期的に読んでください。それらのすべてを使用したり、すべてのキーを覚えたりすることを心配しないでください。コマンドが存在することを知っているだけです。コマンドを調べて、繰り返し何かをしていることに気付いたときに使用してください。
  • 特定の文字d$の後の行全体を削除するなど、何かを定期的に実行していることに気付いた場合は、簡単なGoogle検索でそのコマンドを見つけることができるかどうかを確認してください。
  • 便利だと思うコマンドを書き留め、コードを書いている間、そのリストを表示できる場所に保管してください。私は何かを印刷するのをやめ、代わりに一度にいくつかのコマンドだけにメモを投稿することをお勧めします。
  • 可能であれば、他のプログラマがvimを使用しているのを見て、彼らが何か面白いことをしているのを見て、彼らが使用しているコマンドを尋ねてください。

これらのヒントに加えて、理解すべき基本的な概念がいくつかあります。

  • vimは同じ文字を使用して同じ関数を表します。たとえば、文字の後の行を削除するには、d$を使用します。特定の文字の後の行を強調表示するには、v$を使用します。したがって、$は、カーソルが現在ある行の最後まで何かを行うことを示していることに注意してください。
  • uは元に戻し、ctrl+rはやり直しです。
  • コマンドの前に数字を置くと、繰り返し実行されます。 3ddはカーソルのある行とそれに続く2行を削除します。同様に3yyはカーソルのある行とそれに続く2行をコピーします。
  • バッファをナビゲートする方法を理解するには、:lsを使用してバッファをリストし、:bn:bpを使用してバッファを循環させます。
  • :helpにあるチュートリアルを読んでください。これはおそらく「ロープを学ぶ」ための最良の方法であり、残りのコマンドは使用方法を通じて学習します。
2
amccormack

vimを使用した効率的な編集 に進み、開始するために必要なものを学習します。そのページのすべてが最初から必要なわけではないため、必要なものを選択してください。

そこから、すべてにvimを使用します。 「hjkl」、「y」、「p」は、たとえ最も効率的な方法でなくても、長い道のりを歩みます。効率的に(またはまったく)実行するための魔法の鍵がわからないタスクに出くわし、それを数回以上実行していることに気付いたら、調べてみてください。少しずつそれは第二の自然になります。

多くの月(最後に「m」がなかったとき)にvimが気が遠くなるのを見つけましたが、効率を上げるために着実に約1週間しかかかりませんでした。私は今でも、それを処理する最も速いエディターだと思っています。

1
mikestew