VIMの省略形の使用


Pueden leer la versión en español .


Vimが非常によくするものの1つは自動化です.今回は、“略語”と呼ばれる機能を探索し、INSERTモードで自動化するためにどのように使用することができますか(他のモードで使用することができますが、挿入モードに集中します).我々は、最も基本的なユースケースから詳細に精緻化されるいくつかに行きます.しかし、心配しないでください、我々は一度に1つのステップを取るでしょう.始めましょう.

ステップ0


略称はコマンドで割り当てることができます:ab[breviate] . 私は挿入モードに集中したいので:iabbrev . これはあなたがそれを使う方法です.
:iabbrev [<expr>] [<buffer>] {abbreviation} {expansion}
ここでは、内部の何でも[] はオプションです.<expr> 拡張を作成するためにvimscript式を使うことができます.<buffer> は、現在のバッファにのみ適用されることを意味します.abbreviation あなたがタイプし、それはexpansion .
このコマンドはautocommands ファイル固有の省略名を自動的に作成します.あなたがこのように何かを置くならば.vimrc .
:autocmd FileType html,javascript,typescript,vue
  \ :iabbrev <buffer> some-abbreviation some-expansion
そうすればsome-abbreviation あなたに利用できるhtml , javascript , typescript and vue ファイル.この知識を使用すると、いくつかの作成を開始することができます.

こんにちはwordl


Typosあなたはそれらを嫌い?執筆heigth それから、あなたのコードで働いていない何かが非常に悩むことができるとわかります.まあ、これ以上.今、あなたは自動的に修正するためのツール(私はコマンドを意味する)を持っています.
:iabbrev heigth height
今書くときheigth を押すとspace 鍵になるheight .

しかし、楽しいが停止しません.

それは手紙のためだけではない


通常のマッピングと同じように:map コマンドのような特殊なシーケンスを使用することができます<CR> (the enter キー、<Up> , <Tab> そして、より多く.これは私たちにカーソルを移動し、より精巧なスニペットを作成する力を与える.
JavaScriptファイルで最も一般的なことの一つはconsole.log() , そして、それは私だけではない、開発者のために作られたいくつかのテキストエディタがそのためのショートカットを内蔵しているのはとても一般的です.Vimはそのようなエディタではありません.
:iabbrev <buffer> con@ console.log();<Left><Left>

The @ この場合のサインは重要ではありません、それはちょうど私が私のVim Configの上で続く愚かなコンベンションです.私の使用<buffer> なぜなら、すべてのバッファで利用できるようにしたくないからです.私は、私が以前にあなたに見せたもののような自動コマンドでこれを使います.
あなたは、中で括弧の間にスペースがあると気がつきますlog 関数は、私たちが“展開”を選択したのでspace キー.Vimは、“非キーワード文字”を押した後に、その文字が展開された後に挿入されます.基本的にすべての文字といくつかの特殊文字は“キーワード文字”と見なされ、そのセットに含まれていないものは拡張を開始します.チェックしたい:help 'iskeyword' 詳細は
とにかく、あなたがその余分なスペースを望まないならば、あなたはシーケンスで拡大を始めることができます<C-]> それでcontrol + closing bracket .

…を待つ.誰かがスニペットを言いましたか?


はい、はい.この機能を使用すると、空想IDEで見つけるような複雑なスニペットを作成できます.JavaScriptファイルには、すぐに呼び出された関数式を作成したいですか?問題ありません.
:iabbrev <buffer> iife@ (async function() {})();<Left><Left><Left><Left><Left><CR><CR><Up>

何か知ってる?それをひっかいてください.問題がある.すべての人々<Left> sは私を傷つけています.あなただけのためのスニペットを作るイメージングswitch/case ? そのスタイルでそれを書くことはひどいでしょう、それは働きます、しかし、それはひどいでしょう.このための簡単な解決策は心配しないでください.

挿入モードのエスケープ


我々が基本的にキーストロークを自動化しているので、我々は非常におかしいものをすることができます<Esc> 通常モードに移動し、そのモードで行うことができますすべてのvimの良さを活用する.それで、我々はこれのようにそれを書き換えることができました.
:iabbrev <buffer> iife@ (async function() {})();<Esc>4hi<CR><CR><Up>
我々は同じ断片を得ました、しかし、現在、よりひどいです.私たちは<Left><Esc>4hi , もう少し暗号的だが短い.しかし、もしあなたが今何を知っている必要があります4hi あなたがそれを押すならば、あなたはします.実際には、挿入モードでコマンドを入力するだけですから4h ) そして戻って、我々は少し簡単にすることができます.
:iabbrev <buffer> iife@ (async function() {})();<C-o>4h<CR><CR><Up>
現在使用<C-o> ( control + o ) 通常モードに移動するには、1つのコマンドを作成し、すぐに挿入モードに戻ります.

レッツゲットリアルファンシー


方法についてはさらに一歩.カーソルを便利な場所に置くことができるスニペットを作る<Left><Right> s.
我々は、さらに別のバージョンを作ることができますiife@ しかし、私はあなたにより多くの考えを与えたいです.「伝統的な」をしましょうfor ループ.閉じるこの動画はお気に入りから削除されています.
for(let i = 0; i < {PLACEHOLDER}; i++) {

}
拡大の終わりにカーソルがどこにあるか{PLACEHOLDER} 今回は、何も欲しくない<Left> S<Right> s、我々はちょうどそこに行きたいです.どうやってやるの?で検索します.はい、我々はまた、検索を行うことができます/ or ? .
:iabbrev <buffer> forii@ for(let i = 0; i <z; i++) {<CR><CR>}<Esc>?z<CR>xi
注意z ? それは私のプレースホルダーです.私はすべてを入力した後、私は<Esc> , プレス? (後方検索)z , 検索を送信するには<CR> そして、それは私が欲しいどこに私を取るでしょうxiz そして、私は挿入モードに戻ることができます.

より多くのPowerRRR


他に何ができるか引数.関数引数のような単語を使う.ああ、それはクールでしょう.これに最適なユースケースを得ました.それをしましょう.
ご存知ですかvue-vscode-snippets ? 大丈夫です.vscodeのvue snippetsです.それらのスニペットの1つは呼ばれますvimport-export , これは、このボイラープレートを作成します.
import Name from '@/components/Name.vue';

export default {
  component: {
    Name,
  }
};
それについてのクールなことは、vscodeの複数のカーソル機能を使用して置き換えることですName コンポーネント名を指定します.私は正直です、私は嫉妬深いです、私はVimで複数のカーソルが欲しいです.私はプラグインがあることを知っています、しかし、私はそれがネイティブの機能であることを望みます.とにかく、我々は、複数のカーソルを必要としない、我々は文字通りちょうど複数の場所に同じ単語を置く必要があります.
これはどのようになるかです:私は(私のコンポーネントの名前)の単語を入力し、省略形.このように.
MyComponent vcomp@
何が起こるか、私は置くつもりですMyComponent レジスタで、ちょうどそれをペーストしてください、そして、私は必要です.準備ができましたか.インポートパーツから始めましょう.
:iabbrev <buffer> vcomp@ <Esc>bvediimport <C-o>P from '@/components/<C-o>P.vue';
このキーコンポーネントは<Esc>bved . <Esc> 通常モードでは、私たちを取るでしょう.b カーソルを前の単語(コンポーネント名)の先頭に戻します.ved 全体の単語を選択し、それを削除します.おかげさまd 作品は、コンポーネントを使用するだけで待機中のレジスタでご利用いただけます.
今では問題の一部であり、公正であるために簡単に他の部分を作ることができます.一歩一歩しましょう.この省略形の一般的な使用例は、別のコンポーネントの中にコンポーネントを登録することですexport default 私たちが何をしたいのかcomponents プロパティ.基本的には、このプロセスを自動化したい:

第2部は<Esc> キーを使用して通常モードになる/ 捜すcomponents: { , 検索を提出し、以下の行に挿入モードを入力しますo , 使用する<Tab> 適切なスポットに到達するには、コンポーネント名(レジスタに登録されている)をペーストしてコンマを入れます.我々はそこで止まることができました、しかし、私は私の輸入品の注文を保存したいです.次に、私たちは、コンポーネントがあるすべての行を取るので、私たちは<Esc>dd . その後、行の最後まで、それはされますk$ . 入れ子になったオブジェクトの下に行くには% , 一旦我々がそこにいるならば、我々がヒットするので、我々は改行をつくる必要がありますo 再び.これはトリッキーな部分、我々はヒット<Esc> ノーマルモードに移動するにはP 資本p ). それは良いですが、今私たちは新しい空の行を持って、我々はそれを削除するjdd . 最後に、我々のインポートのラインに戻る2<C-o> ( 2回ジャンプする必要があるので、2 )を必要とします.…これが必要です.
<Esc>/components: {<CR>o<Tab><Esc>pa,<Esc>ddk$%ko<Esc>Pjdd2<C-o>a
すべて一緒にこのように見えます.
:iabbrev <buffer> vcomp@ <Esc>bvediimport <C-o>P from '@/components/<C-o>P.vue';<Esc>/components: {<CR>o<Tab><Esc>pa,<Esc>ddk$%ko<Esc>Pjdd2<C-o>a

場合は、いくつかの楽しいこれを取る略語をしようとする必要があります.
Example vvcomp@

export default {

};
そしてこれに変える.
import Example from '@/components/Example.vue';

export default {
  components: {
    Example,
  },
};

上の桜


私は、あなたを殺します.略語は、マクロの中で働きます.このマクロを記録してみてください.
0ea vcomp@^]^]j
^]<Esc> キー.

結論


それです.それは私が今日あなたのために得たすべてです.私は何か役に立つか、少なくともあなたはおそらく使用しないだろう何か面白いことを学んだ.
あなたがより多くの考えをチェックする必要があるならばmy snippets . 何か面白い考えがあれば教えてください.

ソース

  • :help abbreviations
  • Learn Vimscript the Hard Way: Abbreviations
  • お読みありがとうございます.あなたがこの記事を役に立つならば、私の努力を支持したいです.buy me a coffee ☕ .