(初心者向け) Vim の機能紹介@nagoya.vim #1

17,408 views
17,441 views

Published on

0 Comments
62 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
17,408
On SlideShare
0
From Embeds
0
Number of Embeds
15
Actions
Shares
0
Downloads
110
Comments
0
Likes
62
Embeds 0
No embeds

No notes for slide

(初心者向け) Vim の機能紹介@nagoya.vim #1

  1. 1. (初心者向け) Vim の機能とか紹介 2013/9/7 Nagoya.vim cohama / @c0hama
  2. 2. 自己紹介 こはま ❖ Twitter @c0hama ❖ 好きなもの Vim ➢ 戦闘力 1200 くらい ➢ プラグイン3つくらい作った ❖ お仕事は JavaScript、Ruby ❖ 関数型言語も勉強中
  3. 3. はじめに まずは、Vim のおさらいをしましょう。 知ってることばかりかもしれませんがウォーミング・ アップのつもりで。
  4. 4. 1. Vim とは? 2. 基本的なカーソル移動 3. 基本的な編集 4. オペレータとモーション 5. モード 6. 繰り返し 7. ウィンドウ・タブページ 8. ヘルプ もくじ
  5. 5. 1. Vim とは?
  6. 6. Vim ってなんなの ... ● Vim は高機能なテキストエディタ ○ もしくは環境、VM ● モードを持つ ○ カーソル移動やテキストの編集を行うノーマルモード ○ 文字の入力を行うインサートモード ○ 様々な処理を実行するコマンドラインモード ○ などなど ○ (Wikipedia によると全部で 11 のモードがあるらしい) ● カスタマイズ可能 ○ Vim script というとても味わい深い言語でカスタマイズ ○ プラグインという仕組み
  7. 7. 他のエディタに対してどうなの ● 圧倒的なまでの編集効率 ○ 豊富なカーソル移動手段 ○ オペレータ×モーションの組み合わせによる編集 ○ 繰り返し操作 ○ キーバインド ● 軽量で高速に動作 ○ らしい ※ Emacs、Sublime Text もとても良いエディタで す CTRLや他の修飾子の使用は最小限に留めよ、 これらはタイプしにくい。 Vim 公式ヘルプドキュメント develop.txt より
  8. 8. ● h, l, j, k でカーソル移動 ● i でインサートモードに入る ● 適当に文字を入力 ● <Esc> でノーマルモードに戻る ● :w<CR> で保存 ● :q<CR> で終了 今何モードかわからない時はとりあえず、<Esc>を 連打すれば良い。 最低限これだけできれば!
  9. 9. 2. 基本的なカーソル移動
  10. 10. カーソル移動(横) ❖ h, l は大丈夫ですよね? ❖ w, b, e, ge ➢ 単語(word)単位の移動 ❖ W, E, B, gE ➢ 空白区切り(WORD)の単位の移動 ➢ 空白以外の文字の塊が単語(WORD)とみなされます。 ※ 単語の定義は ’iskeyword’ オプ ションで設定 hoge fuga-piyo wb hoge fuga-piyo ge e
  11. 11. カーソル移動(横) ❖ f{char}, F{char} ❖ t{char}, T{char} ➢ f,F と同様。ただしカーソルがひとつ手前に来る ❖ ; ➢ 直前の f,F,t,T を繰り返し ❖ , ➢ 直前の f,F,t,T を逆方向に繰り返し hoge fuga-piyo hogera fhFe faFh
  12. 12. カーソル移動(横) ❖ ^ ➢ 行の先頭の非空白文字へ移動 ❖ 0 (ゼロ) ➢ 行の先頭へ移動 ❖ $ ➢ 行の最後へ移動   hoge fuga-piyo hogera $^ 0
  13. 13. カーソル移動(縦) ❖ j, k ❖ {, } ➢ 上(下)の空行に移動 (本当はちょっと違う) ❖ gg, G ➢ 最初(最後)の行に移動 ❖ {count}G ➢ {count}行目に移動 (e.g. 100G: 100 行目に移動) ❖ {count}% ➢ ファイルの{count}%の位置に移動 (e.g. 50%: 半分の 位置)
  14. 14. 数字との組み合わせ コマンドの前に数字を前置すると、その回数分の 繰り返しになる ❖ 3h ➢ 3文字左へ移動 ❖ 10j ➢ 10行下へ移動 ❖ 2w ➢ 2単語分前方へ移動
  15. 15. 3. 基本的な編集
  16. 16. ❖ x ➢ 1文字削除 (delete 的なの) ❖ dd ➢ 1行削除 hoge hoe hoge fuga piyo hoge piyo 削除 ※ 行削除した後カーソルがどこに 移動するかは 'startofline' オプションの値に依存する ※ Vim の削除は他のエディタにおける「切り取り」に近い。 つまり、削除したテキストをあとで貼り付けられる。 本当の削除には "_d を使う。
  17. 17. 削除 ❖ dw ➢ 単語を削除 ➢ カーソルの位置から次の単語の先頭の一つ前まで削除 ❖ d$ ➢ 行末まで削除 quick brown fox quick fox quick brown fox quick bfox quick brown fox quick  
  18. 18. ヤンク(コピーのこと)、貼り付け Vim ではいわゆるコピーのことを「ヤンク」といいま す。 ❖ yy ➢ 現在の行をヤンク ❖ yw ➢ 単語をヤンク ❖ y$ ➢ 行末までヤンク ❖ p ➢ カーソルの後ろに貼り付け ❖ P ➢ カーソルの前に貼り付け hoge piyo hoge piyo piyo yyp
  19. 19. 数字との組み合わせ その2 編集のためのコマンドも数字との組み合わせ可能 ❖ 4x ➢ 4文字削除 ❖ 3dd ➢ 3行分削除 ❖ 2p ➢ 2回分貼り付け hoge fuga hoge fuga hoge fuga hoge fuga 2yyj2p
  20. 20. 4. オペレータとモーション
  21. 21. 復習 ❖ w ➢ 1単語分前方へ移動 ❖ dw ➢ 1単語削除 ❖ yw ➢ 1単語ヤンク ❖ $ ➢ 行末まで移動 ❖ d$ ➢ 行末まで削除 ❖ y$ ➢ 行末までヤンク 法則性がある!
  22. 22. オペレータとモーション オペレータコマンドのあとに移動コマンドを入力す ると、移動した範囲のテキストを処理できる 数字との組み合わせも可能 オペレータコマンドを2回押すと現在行に作用 d w オペレータ モーション
  23. 23. オペレータコマンド ❖ d ➢ 削除 ❖ y ➢ ヤンク ❖ c ➢ 削除した後インサートモードになる ❖ >, < ➢ インデントを増加/減少(行にしか作用しない:行指向) ❖ = ➢ インデントを自動調整(行指向)
  24. 24. 組み合わせ例 ❖ d2w ➢ 2単語分削除(2dw と同じ) ❖ yfa ➢ 前方の最初の a までヤンク ❖ ct) ➢ 前方の ) のひとつ手前まで削除してインサートモードに なる ❖ 3>> ➢ 3行分のインデントを増加(>2j でも同じ) ❖ =G ➢ 最終行までのインデントを自動調整
  25. 25. テキストオブジェクト オペレータとの組み合わせの時に使用できる特殊 なモーション 特定の範囲をまとめて操作対象にできる ❖ a", i" ➢ ""(double quote) で囲まれた範囲 ➢ a" は " も含めるが i" はその中だけ "Hello, world" di" ""
  26. 26. テキストオブジェクト ❖ a), i) ➢ () で囲まれた範囲 ➢ a) は a( にしても同じ ➢ a は ) 自身も含める ➢ ) をいろんな括弧に変えてみよう (e.g. }, ], >) function() { var a = 0; a++; return a; } >i} function() { var a = 0; a++; return a; }
  27. 27. その他のテキストオブジェクト ❖ at, it ➢ HTML とかのタグ (e.g. <p></p>) に囲まれた範囲 ❖ aw, iw ➢ 1単語の範囲 ❖ aW, iW ➢ 1単語(WORD)の範囲(≒空白区切りの範囲) ❖ ap, ip ➢ 段落の範囲(≒空行の間の範囲)
  28. 28. オペレータとモーションの拡張 オペレータとモーション(テキストオブジェクト含む) は拡張可能。 たいていはプラグインを入れて拡張する 例) ❖ tpope/vim-commentary ➢ で範囲をコメントアウト ❖ kana/vim-textobj-indent ➢ ai, ii でインデントが同じものをテキストオブジェクトと して扱う
  29. 29. オペレータとモーションの拡張の例 commentary と textobj-indent の組み合わせ def hello() 10.times do p "hello" end p "end" end ai def hello() # 10.times do # p "hello" # end # p "end" end
  30. 30. 5. モード
  31. 31. ❖ ノーマルモード ❖ インサートモード ❖ ビジュアルモード ❖ コマンドラインモード Vim のモード
  32. 32. インサートモード ❖ 文字を入力するためのモード ❖ インサートモードに入るための手段は豊富に用 意されている
  33. 33. ❖ インサートモードの入り方 ➢ i : カーソルの前の位置 ➢ a : カーソルの後ろの位置 ➢ o : カーソルの下の行 ➢ O : カーソルの上の行 ➢ s : 1文字削除してその位置 ➢ S : 行削除してその行 インサートモード hoge ho|ge hoge hog|e hoge hoge | hoge | hoge hoge ho|e hoge |
  34. 34. インサートモード ❖ インサートモードの入り方(続き) ➢ I : 行の先頭(非空白文字)から挿入 (インデントのスペースやタブより左には行かない) ➢ gI : 本当に行頭から挿入 ➢ A : 行末に挿入 ➢ gi : 最後に挿入された位置から挿入(デモ) ➢ c{motion} : ある範囲のテキストを削除して挿入 hoge |hoge hoge | hoge hoge hoge|
  35. 35. インサートモード ❖ インサートモードで使える便利なコマンド ➢ <C-t> : 現在行のインデントを増加 ➢ <C-d> : 現在行のインデントを減少 ➢ <C-w> : カーソル前の単語を削除 (ただし挿入位置で一旦止まる) ➢ <C-u> : 現在行を削除            (ただし挿入位置で一旦止まる) ➢ <C-r>" : ヤンク(コピー)した文字列を挿入
  36. 36. ビジュアルモード ブラウザとか他のエディタにあるようなマウスで ドラッグするとハイライトされるアレのこと ❖ v ➢ ビジュアルモードになる The quick brown fox jumps the lazy dog. vjhh The quick brown fox jumps the lazy dog. The quick brown dog. d
  37. 37. ビジュアルモード ❖ V (大文字) ➢ 行ビジュアルモード ❖ <C-v> ➢ 矩形ビジュアルモード The quick brown fox jumps the lazy dog. V The quick brown fox jumps the lazy dog. The quick brown fox jumps the lazy dog.
  38. 38. ビジュアルモード ❖ ビジュアルモードでオペレータコマンドを入力す ることで、選択範囲に対して処理を実行できる The quick brown fox jumps the lazy dog. d The quick brown dog.
  39. 39. ビジュアルモード ❖ 矩形ビジュアルモードを使った列編集 a = 1; b = 2; c = 4; Ivar<Space><Esc> var a = 1; var b = 2; var c = 4;
  40. 40. コマンドラインモード ● :w とか :q とかを実行するためのモード ○ Ex コマンドやコロンコマンドやコマンドラインコマンドと呼 ぶ ● ファイル操作、検索、置換など割りと複雑なこと を行うためのモード
  41. 41. ファイル操作 ❖ :write ➢ 上書き保存 ➢ 省略して :w ❖ :quit ➢ 現在のウィンドウを閉じるコマンド ➢ Vim の終了コマンドではない! ➢ 省略して :q ❖ :save {file} ➢ いわゆる名前を付けて保存 ➢ :w {file} とは微妙に違う ❖ :edit {file} ➢ ファイルを開く
  42. 42. 検索と置換 ❖ /{pattern} ➢ {pattern} を前方検索 ➢ 移動コマンドとしても使えるので d/hoge といったことも 可能 ❖ ?{pattern} ➢ / の後方検索バージョン ❖ :%s/{pattern}/{string}/g ➢ ファイル全体から{pattern}を検索して{string}に置 換する ➢ 実は区切りは / でなくても良い ■ :%s#/#hoge#g → / を hoge に置換
  43. 43. 6. 繰り返し
  44. 44. 単発繰り返し ❖ . (ドット) ➢ 直前のコマンドを繰り返す hoge fuga piyo dw fuga piyo . piyo println(msg) println("hoge fuga") println(obj.toString()) println() println("hoge fuga") println(obj.toString()) di) println() println() println() j.j.
  45. 45. マクロ Excel とかにある操作を記録するやつ ❖ q{a-z} ➢ 操作の記録を開始する ➢ マクロの保存場所は a ~ z までの 26 個 ❖ q ➢ 記録を終了 ❖ @{a-z} ➢ 記録したマクロを再生する
  46. 46. マクロの例 println(msg) println("hoge fuga") println(obj.toString()) qafi) println(msg) println("hoge fuga") println(obj.toString()) println(msg + "!") println("hoge fuga") println(obj.toString()) i+ "!"<Esc>q 記録開始 記録終了 println(msg + "!") println("hoge fuga" + "!") println(obj.toString() + "!") j@aj.
  47. 47. 7. ウィンドウ・タブページ
  48. 48. ウィンドウ分割やタブページを使うことで一度に複 数のファイルを開くことができます 複数のファイルを編集したい
  49. 49. ウィンドウ分割 ❖ :split {file} ➢ {file} を水平分割で開く ❖ :vsplit {file} ➢ {file} を垂直分割で開く ❖ <C-w>w ➢ 別のウィンドウへカーソルを移動 ➢ <C-w><C-w> でも良い
  50. 50. タブページ ※ 単にタブというと <Tab> 文字のことになるので注意 ❖ :tabedit {file} ➢ {file} を新しいタブページで開く ❖ gt, :tabnext ➢ 次のタブページヘ ❖ gT, :tabprevious ➢ 前のタブページヘ
  51. 51. 8. ヘルプ
  52. 52. ヘルプドキュメント Vim には最初からかなりの量のヘルプドキュメント が用意されている。 Vim の基本的な使い方やコマンドの一覧などにつ いて調べることが可能
  53. 53. ヘルプの使い方 ❖ :help ➢ ヘルプドキュメントの目次を開く ❖ :help w ➢ w というコマンドについて調べる ❖ :help ^w ➢ <C-w> というコマンドについて調べる ❖ :help :w ➢ :w という Ex コマンドについて調べる ❖ :help {topic} ➢ {topic} で検索した結果について調べる
  54. 54. 初心者におすすめの :help の記事 ❖ :help usr_01 ➢ ユーザマニュアル ➢ 基本から応用まで Vim について学べる ➢ usr_01 から usr_12 まで順番に読むと良い ➢ 「Vim テクニックバイブル」や「実践 Vim」よりもまずは ユーザマニュアルを読む ❖ :help quickref ➢ いわゆるチートシートのようなもの ❖ :help option-list ➢ Vim のオプションの一覧 ➢ vimrc 書くときに便利
  55. 55. まとめ Vim すごい Vim の全機能はとてもじゃないけど30分じゃ説明 できない (quickfix、レジスタ、diff、正規表現、マーク、...) わからないことは :help で調べる 時間があれば :help を読みましょう
  56. 56. おわり

×