秒速で初心者からエキスパートになる。 たった7ステップで。
vimconf2016の発表で使用したサンプルデモ
High speed tour from beginner to expert in 7 steps の抜粋版
※ step5以降は要 vim-mode-plus
- ビジュアルモードは知ってるよね?
- TextObject を使えや
- もっとええ Operator つかえや
- Operator と TextObject を組み合わせてみよう
- Operator の動作を
o
で変更してみよう. Occurrence に対して、Operate するようになるよ! - preset-occurrence を使ってみよう
- persistent-selection(消えないセレクション)を使ってみよう
チュートリアルで使用するテキスト
This is 1st paragraph text.
2nd line also include text text text.
3rd line include text text text
This is 2nd paragraph text.
2nd line also include text text text.
3rd line include text text text
4th text
1. ビジュアルモードは知ってるよね?
最初のパラグラフを abc
に書き換えて.
visual-mode
でパラグラフ選択できるよね?
-
v j j $
orV j j
-
d
で消す。 -
i
でinsert-mode
にはいって -
abc
と入力したらescape
2. TextObject を使えや
TextObject
を使えばもっと良くなるよ。
パラグラフ全体を i p
(inner-paragraph
) で選択してみろ。
v i p
-
d
で消す. -
i
でinsert-mode
にはいって -
abc
と入力したらescape
3. もっとええ Operator つかえや.
もっと良い Operator
を使えばもっと良くなる。
d
で消してから i
で insert-mode
に入るより、c
を使えば両方一気にやれるぞ!
v i p
-
c
でchange
しよう.パラグラフ全体がdelete
されて、今キミはinsert-mode
にいる! -
abc
と入力したらescape
4. Operator と TextObject を組み合わせてみよう
visual-mode
を使わなければ、もっと良くなる。
-
c i p
でパラグラフ自体をchange
してみて。Operator が最初で、次に Target(TextObject) の順番だ -
abc
と入力したらescape
- 2番目のパラグラフで
.
リピートしてみよう
5. Operator の動作を o
で変更してみよう。 Occurrence に対して、Operate するようになるよ!
新しいミッションを与える
今回は、パラグラフ全体を abc
に変えるんじゃなくて、パラグラフ内の text
という文字列のみを abc
に変えてほしい。
o
Operator modifier は、まさにこの為にある!
- 最初のパラグラフの
text
という文字に移動して -
c o i p
かc o p
と打って -
abc
と入力したらescape
- 2番目のパラグラフで
.
リピートしてみよう
何が起こった?
o
は、カーソルの下の単語をまず、keyword としてピックアップする。そして、ターゲットの中で出くわす(occurrences
)、keyword に対して Operator を apply するようになるんだ。
今までみたいに、パラグラフ全体を change
して abc
に変える代わりに
パラグラフの中で出くわす text
(カーソル下の単語) を change
するようになったんだ。
内部的には、こうなっている
- 通常: パラグラフを
select
してchange
-
o
modifier: パラグラフをselect
して, 更にその中からtext
をselect
し直して(re-select
)change
6.preset-occurrence を使ってみよう
新しいミッションを与える
今回は text
と line
の両方を abc
に変更して欲しい。
つまり 2つ!! のキーワードを変えてほしい。
preset-occurrence
はこういう時に使える。
o
をオペレーションの途中に挟み込む代わりに、前もって occurrence keyword を指定しておけるんだ。
- 1行目の
text
に移動してg o
とタイプ - 2行目の
line
に移動してg o
とタイプ -
c o i p
かc o p
と打って. -
abc
と入力したらescape
. - 2番目のパラグラフで
.
リピートしてみよう
7. persistent-selection(消えないセレクション)を使ってみよう
新しいミッションを与える
text
と line
の両方を abc
に変更して欲しい。ただし、2番目のパラグラフの2行目だけは変えないで欲しい。
なんてこった。単純な .
リピートが使えない!
persistent-selection
はこういう時使える。
-
text
とline
にg o
で preset-occurrence して -
v i p
でパラグラフ選択、そのままj j
で2番目のパラグラフの1行目まで選択して、enter
。普通の selection がpersistent-selection
になった -
j j
で 2番目のパラグラフの3行目に移動して、V j
- よし、準備は整った。
c
で変更しよう -
abc
と入力したらescape
さらに難しいミッション
以下のサンプルテキストから、 vim-mode-plus のコマンド名を PascalCase 形式で抜き出して、さらにアルファベット順に並び替えて。
From-short
"'": 'vim-mode-plus:move-to-mark-line'
To-short
MoveToMarkLine
From-full
'`': 'vim-mode-plus:move-to-mark'
"'": 'vim-mode-plus:move-to-mark-line'
'/': 'vim-mode-plus:search'
'?': 'vim-mode-plus:search-backwards'
'*': 'vim-mode-plus:search-current-word'
'#': 'vim-mode-plus:search-current-word-backwards'
'n': 'vim-mode-plus:repeat-search'
'N': 'vim-mode-plus:repeat-search-reverse'
'%': 'vim-mode-plus:move-to-pair'
')': 'vim-mode-plus:move-to-next-sentence'
'(': 'vim-mode-plus:move-to-previous-sentence'
# ')': 'vim-mode-plus:move-to-next-sentence-skip-blank-row'
# '(': 'vim-mode-plus:move-to-previous-sentence-skip-blank-row'
'[': 'vim-mode-plus:move-up-to-edge'
']': 'vim-mode-plus:move-down-to-edge'
'}': 'vim-mode-plus:move-to-next-paragraph'
'{': 'vim-mode-plus:move-to-previous-paragraph'
'G': 'vim-mode-plus:move-to-last-line'
'g g': 'vim-mode-plus:move-to-first-line'
'H': 'vim-mode-plus:move-to-top-of-screen'
'L': 'vim-mode-plus:move-to-bottom-of-screen'
'M': 'vim-mode-plus:move-to-middle-of-screen'
To-full
MoveDownToEdge
MoveToBottomOfScreen
MoveToFirstLine
MoveToLastLine
MoveToMark
MoveToMarkLine
MoveToMiddleOfScreen
MoveToNextParagraph
MoveToNextSentence
MoveToNextSentenceSkipBlankRow
MoveToPair
MoveToPreviousParagraph
MoveToPreviousSentence
MoveToPreviousSentenceSkipBlankRow
MoveToTopOfScreen
MoveUpToEdge
RepeatSearch
RepeatSearchReverse
Search
SearchBackwards
SearchCurrentWord
SearchCurrentWordBackwards
答え(色んなやり方があるけど一つだけ)
- キーバーインドは Mac の人前提
-
incrementalSearch
を有効にする必要あり
-
/
で incremental-search を開始。 -
.*plus:
と入力し、ハイライトを確認(これがこれからchange
するところ) -
ctrl-cmd-c
(検索マッチ対象に対して、change
)。operator-pending モードに入るので、対象範囲を指定する必要がある。 -
i e
(inner-entire
) テキストオブジェクトを指定。これでファイル全体を対象範囲として指定した。 -
insert-mode
にいるので、ctrl-e
でカーソルを行末に移動し、ctrl-h
で行末のシングルクォート('
)を消す。 -
escape
でnormal-mode
に戻る。この時点でまだマルチカーソルは残っている。 -
g C i W
(pascal-case
) をi W
(inner-whole-word
) に apply.dash-case
がDashCase
になる。 -
g g
で行頭に異動。g s G
。現在位置から、ファイルの最後の行まで(G
) をg s
(sort
)。これで sort された! -
d i p
で sort の結果集まった 空行を消して DONE!
書いてみると複雑なステップだが、慣れの問題だ!
"でも操作遅いやん"と思うかもしれなけど、動画用に遅くしてるんだヨ!ホントは目にも留まらぬ速さだヨ!
"自分にはそんな難しいの覚えられない"という人もいるけど、覚える必要なんてないよ!
繰り返し練習して、指が勝手に動くようになるまで、マッスルメモリー、フィンガーメモリーに叩き込むのみだ!
ピアノの運指、空手の型、野球の素振り、英語の発音とおんなじだ!特訓あるのみ!!