56
(初心者向け) Vim の機能とか紹介 2013/9/7 Nagoya.vim cohama / @c0hama

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

  • Upload
    cohama

  • View
    15.764

  • Download
    11

Embed Size (px)

Citation preview

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

(初心者向け) Vim の機能とか紹介

2013/9/7 Nagoya.vimcohama / @c0hama

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

自己紹介

こはま❖ Twitter @c0hama

❖ 好きなもの Vim➢ 戦闘力 1200 くらい➢ プラグイン3つくらい作った

❖ お仕事は JavaScript、Ruby❖ 関数型言語も勉強中

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

はじめに

まずは、Vim のおさらいをしましょう。

知ってることばかりかもしれませんがウォーミング・アップのつもりで。

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

1. Vim とは?2. 基本的なカーソル移動3. 基本的な編集4. オペレータとモーション5. モード6. 繰り返し7. ウィンドウ・タブページ8. ヘルプ

もくじ

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

1. Vim とは?

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

Vim ってなんなの ...

● Vim は高機能なテキストエディタ○ もしくは環境、VM

● モードを持つ○ カーソル移動やテキストの編集を行うノーマルモード○ 文字の入力を行うインサートモード○ 様々な処理を実行するコマンドラインモード○ などなど○ (Wikipedia によると全部で 11 のモードがあるらしい)

● カスタマイズ可能○ Vim script というとても味わい深い言語でカスタマイズ○ プラグインという仕組み

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

他のエディタに対してどうなの

● 圧倒的なまでの編集効率○ 豊富なカーソル移動手段○ オペレータ×モーションの組み合わせによる編集○ 繰り返し操作○ キーバインド

● 軽量で高速に動作○ らしい

※ Emacs、Sublime Text もとても良いエディタです

CTRLや他の修飾子の使用は最小限に留めよ、これらはタイプしにくい。

Vim 公式ヘルプドキュメント develop.txt より

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

● h, l, j, k でカーソル移動

● i でインサートモードに入る

● 適当に文字を入力● <Esc> でノーマルモードに戻る

● :w<CR> で保存

● :q<CR> で終了

今何モードかわからない時はとりあえず、<Esc>を連打すれば良い。

最低限これだけできれば!

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

2. 基本的なカーソル移動

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

カーソル移動(横)

❖ h, l は大丈夫ですよね?

❖ w, b, e, ge➢ 単語(word)単位の移動

❖ W, E, B, gE➢ 空白区切り(WORD)の単位の移動➢ 空白以外の文字の塊が単語(WORD)とみなされます。

※ 単語の定義は ’iskeyword’ オプ

ションで設定

hoge fuga-piyo

wb

hoge fuga-piyo

ge e

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

カーソル移動(横)

❖ f{char}, F{char}

❖ t{char}, T{char}➢ f,F と同様。ただしカーソルがひとつ手前に来る

❖ ;➢ 直前の f,F,t,T を繰り返し

❖ , ➢ 直前の f,F,t,T を逆方向に繰り返し

hoge fuga-piyo hogera

fhFe

faFh

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

カーソル移動(横)

❖ ^➢ 行の先頭の非空白文字へ移動

❖ 0 (ゼロ)➢ 行の先頭へ移動

❖ $➢ 行の最後へ移動

  hoge fuga-piyo hogera

$^

0

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

カーソル移動(縦)

❖ j, k❖ {, }

➢ 上(下)の空行に移動 (本当はちょっと違う)

❖ gg, G➢ 最初(最後)の行に移動

❖ {count}G➢ {count}行目に移動 (e.g. 100G: 100 行目に移動)

❖ {count}%➢ ファイルの{count}%の位置に移動 (e.g. 50%: 半分の

位置)

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

数字との組み合わせ

コマンドの前に数字を前置すると、その回数分の繰り返しになる

❖ 3h➢ 3文字左へ移動

❖ 10j➢ 10行下へ移動

❖ 2w➢ 2単語分前方へ移動

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

3. 基本的な編集

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

❖ x➢ 1文字削除 (delete 的なの)

❖ dd➢ 1行削除

hoge hoe

hogefugapiyo

hogepiyo

削除

※ 行削除した後カーソルがどこに移動するかは 'startofline' オプションの値に依存する

※ Vim の削除は他のエディタにおける「切り取り」に近い。つまり、削除したテキストをあとで貼り付けられる。本当の削除には "_d を使う。

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

削除

❖ dw➢ 単語を削除➢ カーソルの位置から次の単語の先頭の一つ前まで削除

❖ d$➢ 行末まで削除

quick brown fox quick fox

quick brown fox quick bfox

quick brown fox quick  

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

ヤンク(コピーのこと)、貼り付け

Vim ではいわゆるコピーのことを「ヤンク」といいます。❖ yy

➢ 現在の行をヤンク❖ yw

➢ 単語をヤンク❖ y$

➢ 行末までヤンク❖ p

➢ カーソルの後ろに貼り付け❖ P

➢ カーソルの前に貼り付け

hogepiyo

hogepiyopiyo

yyp

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

数字との組み合わせ その2

編集のためのコマンドも数字との組み合わせ可能

❖ 4x➢ 4文字削除

❖ 3dd➢ 3行分削除

❖ 2p➢ 2回分貼り付け

hogefuga

hogefugahogefugahogefuga

2yyj2p

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

4. オペレータとモーション

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

復習

❖ w➢ 1単語分前方へ移動

❖ dw➢ 1単語削除

❖ yw➢ 1単語ヤンク

❖ $➢ 行末まで移動

❖ d$➢ 行末まで削除

❖ y$➢ 行末までヤンク

法則性がある!

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

オペレータとモーション

オペレータコマンドのあとに移動コマンドを入力すると、移動した範囲のテキストを処理できる

数字との組み合わせも可能オペレータコマンドを2回押すと現在行に作用

d w

オペレータ モーション

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

オペレータコマンド

❖ d➢ 削除

❖ y➢ ヤンク

❖ c➢ 削除した後インサートモードになる

❖ >, <➢ インデントを増加/減少(行にしか作用しない:行指向)

❖ =➢ インデントを自動調整(行指向)

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

組み合わせ例

❖ d2w➢ 2単語分削除(2dw と同じ)

❖ yfa➢ 前方の最初の a までヤンク

❖ ct)➢ 前方の ) のひとつ手前まで削除してインサートモードに

なる❖ 3>>

➢ 3行分のインデントを増加(>2j でも同じ)❖ =G

➢ 最終行までのインデントを自動調整

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

テキストオブジェクト

オペレータとの組み合わせの時に使用できる特殊なモーション特定の範囲をまとめて操作対象にできる

❖ a", i"➢ ""(double quote) で囲まれた範囲

➢ a" は " も含めるが i" はその中だけ

"Hello, world"di"

""

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

テキストオブジェクト

❖ a), i)➢ () で囲まれた範囲

➢ a) は a( にしても同じ

➢ a は ) 自身も含める➢ ) をいろんな括弧に変えてみよう (e.g. }, ], >)

function() {var a = 0;a++;return a;}

>i}

function() { var a = 0; a++; return a;}

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

その他のテキストオブジェクト

❖ at, it➢ HTML とかのタグ (e.g. <p></p>) に囲まれた範囲

❖ aw, iw➢ 1単語の範囲

❖ aW, iW➢ 1単語(WORD)の範囲(≒空白区切りの範囲)

❖ ap, ip➢ 段落の範囲(≒空行の間の範囲)

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

オペレータとモーションの拡張

オペレータとモーション(テキストオブジェクト含む)は拡張可能。たいていはプラグインを入れて拡張する例)❖ tpope/vim-commentary

➢ \\ で範囲をコメントアウト

❖ kana/vim-textobj-indent➢ ai, ii でインデントが同じものをテキストオブジェクトと

して扱う

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

オペレータとモーションの拡張の例

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

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

5. モード

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

❖ ノーマルモード❖ インサートモード❖ ビジュアルモード❖ コマンドラインモード

Vim のモード

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

インサートモード

❖ 文字を入力するためのモード❖ インサートモードに入るための手段は豊富に用

意されている

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

❖ インサートモードの入り方➢ i : カーソルの前の位置

➢ a : カーソルの後ろの位置

➢ o : カーソルの下の行

➢ O : カーソルの上の行

➢ s : 1文字削除してその位置

➢ S : 行削除してその行

インサートモード

hoge ho|ge

hoge hog|e

hoge hoge|

hoge |hoge

hoge ho|e

hoge |

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

インサートモード

❖ インサートモードの入り方(続き)➢ I : 行の先頭(非空白文字)から挿入

(インデントのスペースやタブより左には行かない)

➢ gI : 本当に行頭から挿入

➢ A : 行末に挿入

➢ gi : 最後に挿入された位置から挿入(デモ)

➢ c{motion} : ある範囲のテキストを削除して挿入

hoge |hoge

hoge | hoge

hoge hoge|

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

インサートモード

❖ インサートモードで使える便利なコマンド➢ <C-t> : 現在行のインデントを増加

➢ <C-d> : 現在行のインデントを減少

➢ <C-w> : カーソル前の単語を削除

(ただし挿入位置で一旦止まる)

➢ <C-u> : 現在行を削除

           (ただし挿入位置で一旦止まる)

➢ <C-r>" : ヤンク(コピー)した文字列を挿入

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

ビジュアルモード

ブラウザとか他のエディタにあるようなマウスでドラッグするとハイライトされるアレのこと

❖ v➢ ビジュアルモードになる

The quick brown foxjumps the lazy dog.

vjhh The quick brown foxjumps the lazy dog.

The quick brown dog.

d

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

ビジュアルモード

❖ V (大文字)➢ 行ビジュアルモード

❖ <C-v>➢ 矩形ビジュアルモード

The quick brown foxjumps the lazy dog.

V The quick brown foxjumps the lazy dog.

The quick brown foxjumps the lazy dog.

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

ビジュアルモード

❖ ビジュアルモードでオペレータコマンドを入力することで、選択範囲に対して処理を実行できる

The quick brown foxjumps the lazy dog.

d The quick brown dog.

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

ビジュアルモード

❖ 矩形ビジュアルモードを使った列編集

a = 1;b = 2;c = 4;

Ivar<Space><Esc> var a = 1;var b = 2;var c = 4;

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

コマンドラインモード

● :w とか :q とかを実行するためのモード○ Ex コマンドやコロンコマンドやコマンドラインコマンドと呼

● ファイル操作、検索、置換など割りと複雑なことを行うためのモード

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

ファイル操作

❖ :write➢ 上書き保存➢ 省略して :w

❖ :quit➢ 現在のウィンドウを閉じるコマンド➢ Vim の終了コマンドではない!➢ 省略して :q

❖ :save {file}➢ いわゆる名前を付けて保存➢ :w {file} とは微妙に違う

❖ :edit {file}➢ ファイルを開く

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

検索と置換

❖ /{pattern}➢ {pattern} を前方検索

➢ 移動コマンドとしても使えるので d/hoge といったことも

可能

❖ ?{pattern}➢ / の後方検索バージョン

❖ :%s/{pattern}/{string}/g➢ ファイル全体から{pattern}を検索して{string}に置

換する➢ 実は区切りは / でなくても良い

■ :%s#/#hoge#g → / を hoge に置換

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

6. 繰り返し

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

単発繰り返し

❖ . (ドット)➢ 直前のコマンドを繰り返す

hoge fuga piyodw

fuga piyo.

piyo

println(msg)println("hoge fuga")println(obj.toString())

println()println("hoge fuga")println(obj.toString())

di)

println()println()println()

j.j.

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

マクロ

Excel とかにある操作を記録するやつ

❖ q{a-z}➢ 操作の記録を開始する➢ マクロの保存場所は a ~ z までの 26 個

❖ q➢ 記録を終了

❖ @{a-z}➢ 記録したマクロを再生する

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

マクロの例

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.

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

7. ウィンドウ・タブページ

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

ウィンドウ分割やタブページを使うことで一度に複数のファイルを開くことができます

複数のファイルを編集したい

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

ウィンドウ分割

❖ :split {file}➢ {file} を水平分割で開く

❖ :vsplit {file}➢ {file} を垂直分割で開く

❖ <C-w>w➢ 別のウィンドウへカーソルを移動➢ <C-w><C-w> でも良い

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

タブページ

※ 単にタブというと <Tab> 文字のことになるので注意

❖ :tabedit {file}➢ {file} を新しいタブページで開く

❖ gt, :tabnext➢ 次のタブページヘ

❖ gT, :tabprevious➢ 前のタブページヘ

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

8. ヘルプ

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

ヘルプドキュメント

Vim には最初からかなりの量のヘルプドキュメントが用意されている。

Vim の基本的な使い方やコマンドの一覧などについて調べることが可能

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

ヘルプの使い方

❖ :help➢ ヘルプドキュメントの目次を開く

❖ :help w➢ w というコマンドについて調べる

❖ :help ^w➢ <C-w> というコマンドについて調べる

❖ :help :w➢ :w という Ex コマンドについて調べる

❖ :help {topic}➢ {topic} で検索した結果について調べる

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

初心者におすすめの :help の記事

❖ :help usr_01➢ ユーザマニュアル➢ 基本から応用まで Vim について学べる➢ usr_01 から usr_12 まで順番に読むと良い➢ 「Vim テクニックバイブル」や「実践 Vim」よりもまずは

ユーザマニュアルを読む

❖ :help quickref➢ いわゆるチートシートのようなもの

❖ :help option-list➢ Vim のオプションの一覧➢ vimrc 書くときに便利

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

まとめ

Vim すごい

Vim の全機能はとてもじゃないけど30分じゃ説明できない(quickfix、レジスタ、diff、正規表現、マーク、...)

わからないことは :help で調べる

時間があれば :help を読みましょう

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

おわり