Closed11

vim操作(カスタマイズなし)

Ryota OnumaRyota Onuma

移動系

:行番号 行番号gg 行番号G

  • 指定した行に移動
  • 10行目に移動するなら、:10 or 10gg or 10G
Ryota OnumaRyota Onuma

削除系

  • x
    • 現在のカーソルの直下を削除
  • X
    • 現在のカーソルの左を削除
  • d {オペレーション}
    • オペレーションでに応じた要素を削除
      • dl
        • 現在のカーソルの右を削除
      • dh
        • 現在のカーソルの左を削除
      • dj
        • 現在のカーソルの行と直下の行を削除
      • dh
        • 現在のカーソルの行と直上の行を削除
      • d$
        • 現在のカーソルからその行の末尾までを削除
      • d^
        • 現在のカーソルからその行の最初の文字までを削除
      • dd
        • その行を削除
      • 行数dd
        • 指定した行数分削除
          • 現在の行とその下(指定した行数-1)行
        • 3dd
      • dw
        • カーソル直下の単語を削除
        • 3dw
          • 3単語削除
Ryota OnumaRyota Onuma

挿入/置換系

  • i

    • 現在のカーソルの左にinsertモードで突入
      • 数字i
        • 突入したinsertモード内で入力した文字をinsertモードEscape時に数字 回挿入する
          • 5i
  • I

    • 現在のカーソルの行の行頭にinsertモードで突入
  • a

    • 現在のカーソルの右にinsertモードで突入(append)
  • A

    • 現在のカーソルの行の行末にinsertモードで突入
  • o

    • 現在のカーソルの行の直下に空行作ってinsertモードで突入
        • 数字o
          • 突入したinsertモード内で入力した文字から始まる行をinsertモードEscape時に数字 回挿入する
            • 5o
  • O

    • 現在のカーソルの行の直上に空行作ってinsertモードで突入
  • r

    • Replaceモードに突入
    • カーソル直下の1文字だけ置き換えが可能
  • R

    • Replaceモードに突入
    • 複数文字の置き換えが可能
  • cw

    • 置き換えたいwordの最初にカーソルを置いてcwを押すと単語を削除しつつinsertモードに突入する
  • c$

    • カーソルから文末までを削除しつつinsertモードに突入
  • ~

    • カーソルの位置の文字の大文字と小文字を逆転させる
  • g~w

    • カーソルの位置の単語の大文字と小文字を逆転させる
  • g~$

    • カーソルの位置から行末までを大文字と小文字逆転させる
  • gUU

    • カーソルの行を丸ごと大文字にする
  • guu

      • カーソルの行を丸ごと小文字にする
  • J

    • カーソルの行と下の行を結合する。連結部に空白あり。
  • gJ

    • カーソルの行と下の行を結合する。連結部に空白なし。
Ryota OnumaRyota Onuma

ESC

Ctrl + Cがぱっと見同じ挙動に見えたから、押しやすいしこれでいいじゃんと思ってたら別物だった。
数字iでの離脱時に、Ctrl + Cだと反映されず、ESCだと反映される。

Ctrl + [でもOK(ESCと同じ)

  • こっちの方が指離さなくて良いからESCキーより良い
Ryota OnumaRyota Onuma

検索 / 置換系

1文字の検索

  • f検索したい文字
    • その行にある「検索したい文字」にカーソルを移動する。行の左から右に、最初にhitしたものに飛ぶ。
      • ;を押すと次にhitしたものに飛ぶ ,を押すと戻る
  • F検索したい文字
    • その行にある「検索したい文字」にカーソルを移動する。行の右から左に最初にhitしたものに飛ぶ。
      • ;を押すと次にhitしたものに飛ぶ  ,を押すと戻る
  • t検索したい文字
    • その行にある「検索したい文字」の直前にカーソルを移動する。行の左から右に、最初にhitしたものの直前に飛ぶ。
      • ;を押すと次にhitしたものに飛ぶ ,を押すと戻る
  • T検索したい文字
    • その行にある「検索したい文字」の直前にカーソルを移動する。行の右から左に、最初にhitしたものの直前に飛ぶ。
      • ;を押すと次にhitしたものに飛ぶ ,を押すと戻る

これらは他のコマンドと組み合わせが可能

  • dt検索したい文字
    • 現在のカーソルから検索したい文字の直前までを削除

複数文字列の検索

  • /検索したい文字列

    • n
      • ヒットした次の対象へ
    • N
      • ヒットした前の対象へ
  • インクリメンタルサーチの設定

    • :set is?
      • 現在の設定の確認
    • :set is
      • インクリメンタルサーチON
    • :set nois
      • インクリメンタルサーチOFF
  • 検索でhitしたものを1つずつ同じ文字で置換するには

    1. / で検索
    2. cwとかで置換してエスケープ
    3. nで次のワードにとんで、.を押す(2を繰り返し実行する)
  • *

    • カーソルの単語を、順方向に検索
  • #

    • カーソルの単語を、逆方向に検索

    複数置換

    • :s/old/new/g
      • そのカーソルがある行のすべてのoldをnewに置換する
    • :範囲s/old/new/g
      • 範囲内のすべてのoldをnewに置換する
      • ファイル内のすべての行を対象にする場合
        • :%s/old/new/g
Ryota OnumaRyota Onuma

Text object

テキストオブジェクトを使うことで、例えば単語のコピーのときとかにわざわざ文頭に移動してwでなんとかするみたいなことをしなくても済むようになる。

{operator}{a}{object}
{operator}{i}{object}

daw = Delete a word (テキストオブジェクト全体を指定(a))
ciw = change inner word テキストオブジェクト内部を指定(inner)

種類

  • aw
    • a word 囲みあり
  • iw
    • inner word 囲みなし
  • as
    • a sentence 囲みあり
  • is
    • inner sentence 囲みなし
  • ap
    • a paragraph 囲みあり
  • ip
    • inner paragraph 囲みなし

{とか(とか<とかtとかもobjectとして使える

  • a{
    • a { {も含め{の中身
  • i{
    • inner { {の中身
      ※ t はタグ( HTMLタグみたいな)

参考)
https://qiita.com/kasei-san/items/143af11bb2559cf0e540
https://blog.carbonfive.com/vim-text-objects-the-definitive-guide/

Ryota OnumaRyota Onuma

マクロ

レジスタに複数のキー操作の流れを記録/再生できる仕組み
vimrcに保存することもできる

マクロの登録

qレジスタ名 で登録開始

  • 例)qa
    • aレジスタに登録する場合
      qで登録終了

マクロの実行

@レジスタ名

  • 例)@a
    • aレジスタに入ってるマクロを実行

数字@レジスタ名で繰り返すことも可能
@@で直前のマクロを繰り返せる

Ryota OnumaRyota Onuma

Visual モード

  • v
    • 文字レベルビジュアルモード
    • 選択後、選択したまま選択範囲の一番反対側に戻る場合、o
  • ``V`
    • 行レベルビジュアルモード
  • Ctrl + v
    • ブロックレベルビジュアルモード
    • 選択後、選択したまま選択範囲の縦方向の一番反対側に戻る場合、o
    • 選択後、選択したまま選択範囲の横方向の一番反対側に戻る場合、O

複数行に同じ文字を挿入したい場合

  • Ctrl + vでブロックビジュアルモードに入る
  • IAでインサートモードに入る
    • 大文字であることに注意
  • 入力してエスケープすると、ブロックビジュアルモードで選択した範囲全てに適用される
このスクラップは3ヶ月前にクローズされました