Upload
cohama
View
15.764
Download
11
Embed Size (px)
Citation preview
(初心者向け) Vim の機能とか紹介
2013/9/7 Nagoya.vimcohama / @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
hogefugapiyo
hogepiyo
削除
※ 行削除した後カーソルがどこに移動するかは '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
➢ カーソルの前に貼り付け
hogepiyo
hogepiyopiyo
yyp
数字との組み合わせ その2
編集のためのコマンドも数字との組み合わせ可能
❖ 4x➢ 4文字削除
❖ 3dd➢ 3行分削除
❖ 2p➢ 2回分貼り付け
hogefuga
hogefugahogefugahogefuga
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 foxjumps the lazy dog.
vjhh The quick brown foxjumps the lazy dog.
The quick brown dog.
d
ビジュアルモード
❖ 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.
ビジュアルモード
❖ ビジュアルモードでオペレータコマンドを入力することで、選択範囲に対して処理を実行できる
The quick brown foxjumps 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 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.
マクロ
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 を読みましょう
おわり