(初心者向け) Vim の機能紹介@nagoya.vim #1
Upcoming SlideShare
Loading in...5
×
 

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

on

  • 16,608 views

 

Statistics

Views

Total Views
16,608
Views on SlideShare
13,941
Embed Views
2,667

Actions

Likes
54
Downloads
94
Comments
0

14 Embeds 2,667

http://cohama.hateblo.jp 1736
http://bikkuri.me 723
https://twitter.com 172
http://s.deeeki.com 12
http://b.hatena.ne.jp 5
http://cloud.feedly.com 5
http://nuevospowerpoints.blogspot.com 4
http://nuevospowerpoints.blogspot.mx 3
http://nuevospowerpoints.blogspot.com.es 2
http://www.interner.info 1
http://tweetedtimes.com 1
http://nuevospowerpoints.blogspot.com.ar 1
https://web.tweetdeck.com 1
http://www.google.co.jp 1
More...

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

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

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