[Vim/vim-mode-plus for Atom] 秒速で初心者からエキスパートになる。 たった7ステップで。

  • 81
    いいね
  • 0
    コメント

秒速で初心者からエキスパートになる。 たった7ステップで。

vimconf2016の発表で使用したサンプルデモ

High speed tour from beginner to expert in 7 steps の抜粋版

※ step5以降は要 vim-mode-plus

  1. ビジュアルモードは知ってるよね?
  2. TextObject を使えや
  3. もっとええ Operator つかえや
  4. Operator と TextObject を組み合わせてみよう
  5. Operator の動作を o で変更してみよう. Occurrence に対して、Operate するようになるよ!
  6. preset-occurrence を使ってみよう
  7. 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 でパラグラフ選択できるよね?

  1. v j j $ or V j j
  2. d で消す。
  3. iinsert-mode にはいって
  4. abc と入力したら escape

2. TextObject を使えや

TextObject を使えばもっと良くなるよ。

パラグラフ全体を i p(inner-paragraph) で選択してみろ。

  1. v i p
  2. d で消す.
  3. iinsert-mode にはいって
  4. abc と入力したら escape

3. もっとええ Operator つかえや.

もっと良い Operator を使えばもっと良くなる。

d で消してから iinsert-mode に入るより、c を使えば両方一気にやれるぞ!

  1. v i p
  2. cchange しよう.パラグラフ全体が delete されて、今キミは insert-mode にいる!
  3. abc と入力したら escape

4. Operator と TextObject を組み合わせてみよう

visual-mode を使わなければ、もっと良くなる。

  1. c i p でパラグラフ自体を change してみて。Operator が最初で、次に Target(TextObject) の順番だ
  2. abc と入力したら escape
  3. 2番目のパラグラフで . リピートしてみよう

5. Operator の動作を o で変更してみよう。 Occurrence に対して、Operate するようになるよ!

新しいミッションを与える

今回は、パラグラフ全体を abc に変えるんじゃなくて、パラグラフ内の text という文字列のみを abc に変えてほしい。

o Operator modifier は、まさにこの為にある!

  1. 最初のパラグラフの text という文字に移動して
  2. c o i pc o p と打って
  3. abc と入力したら escape
  4. 2番目のパラグラフで . リピートしてみよう

何が起こった?

o は、カーソルの下の単語をまず、keyword としてピックアップする。そして、ターゲットの中で出くわす(occurrences)、keyword に対して Operator を apply するようになるんだ。

今までみたいに、パラグラフ全体を change して abc に変える代わりに

パラグラフの中で出くわす text(カーソル下の単語) を change するようになったんだ。

内部的には、こうなっている

  • 通常: パラグラフを select して change
  • o modifier: パラグラフを select して, 更にその中から textselect し直して(re-select) change

6.preset-occurrence を使ってみよう

新しいミッションを与える

今回は textline の両方を abc に変更して欲しい。

つまり 2つ!! のキーワードを変えてほしい。

preset-occurrence はこういう時に使える。

o をオペレーションの途中に挟み込む代わりに、前もって occurrence keyword を指定しておけるんだ。

  1. 1行目の text に移動して g oとタイプ
  2. 2行目の line に移動して g o とタイプ
  3. c o i pc o p と打って.
  4. abc と入力したら escape.
  5. 2番目のパラグラフで . リピートしてみよう

7. persistent-selection(消えないセレクション)を使ってみよう

新しいミッションを与える

textline の両方を abc に変更して欲しい。ただし、2番目のパラグラフの2行目だけは変えないで欲しい。

なんてこった。単純な . リピートが使えない!

persistent-selection はこういう時使える。

  1. textlineg o で preset-occurrence して
  2. v i p でパラグラフ選択、そのまま j j で2番目のパラグラフの1行目まで選択して、enter。普通の selection が persistent-selection になった
  3. j j で 2番目のパラグラフの3行目に移動して、V j
  4. よし、準備は整った。c で変更しよう
  5. 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 を有効にする必要あり

  1. / で incremental-search を開始。
  2. .*plus: と入力し、ハイライトを確認(これがこれから change するところ)
  3. ctrl-cmd-c (検索マッチ対象に対して、change)。operator-pending モードに入るので、対象範囲を指定する必要がある。
  4. i e (inner-entire) テキストオブジェクトを指定。これでファイル全体を対象範囲として指定した。
  5. insert-mode にいるので、ctrl-e でカーソルを行末に移動し、ctrl-h で行末のシングルクォート(')を消す。
  6. escapenormal-mode に戻る。この時点でまだマルチカーソルは残っている。
  7. g C i W (pascal-case) を i W(inner-whole-word) に apply. dash-caseDashCase になる。
  8. g g で行頭に異動。g s G。現在位置から、ファイルの最後の行まで(G) を g s(sort)。これで sort された!
  9. d i p で sort の結果集まった 空行を消して DONE!

書いてみると複雑なステップだが、慣れの問題だ!
"でも操作遅いやん"と思うかもしれなけど、動画用に遅くしてるんだヨ!ホントは目にも留まらぬ速さだヨ!
"自分にはそんな難しいの覚えられない"という人もいるけど、覚える必要なんてないよ!
繰り返し練習して、指が勝手に動くようになるまで、マッスルメモリー、フィンガーメモリーに叩き込むのみだ!
ピアノの運指、空手の型、野球の素振り、英語の発音とおんなじだ!特訓あるのみ!!