難解なテキスト編集言語としてのVim

どのくらいの頻度で、馴染みのあるパターンに理解を限定しますか? おそらく、vimは組み込みのスクリプト言語を備えたテキストエディターであることをご存知でしょう。 そして、彼らはvimを他のエディターと、時にはIDEと比較します。



おそらく、vimの機能を理解するのに少し似ていると思います。 または、vim機能のもう1つの側面と考えることができます。 私は皆によって疲れ果てたトピックの次の繰り返しをおpoびしますが、この「編集者」についての議論は私を無関心のままにしません。 おそらくあなたの中にもそのような人がいるでしょう。



Habrのオープンスペースのどこかで、キラー機能vim'a-モードについて書いています。 合理的な発言が行われた:モードは、単純な操作のパフォーマンスを複雑にします(他の多くのものと同様に、それほど合理的なコメントもありません)。 私は常に仕事でvimを使用していますが、最も単純な場合にモードが仕事を本当に複雑にしていることは否定できません。 しかし、難解なテキスト編集言語としてのvimの機能を見てみましょう。



コマンドモードでは、すべてのキーストロークはコマンドまたはこれらのコマンドのパラメーターとして解釈されます。 入力しやすいように、ほとんどの場合、コマンドは1文字で作成されます。 すべての言語構成要素と変数が単一文字である場合、C#がどのように見えるかを想像してください。 それが、vimの学習曲線が非常に急勾配である理由です。 多数の単一文字コマンドを覚えて、ナビゲートできるようにする必要があります。 stackoverflowでは、vimタグによってそのようなコマンドのコレクションである回答を見つけることができます。 例:



vmap \c :s!^!//!<CR> vmap \u :s!^//!!<CR>
      
      





これらのことはBrainfuckのプログラムの例を思い出させます(vimコマンドは私の意見では少し単純ですが)。



 ++++++++++[>+++++++>++++++++++>+++<<<-]>++.>+.+++++++ ..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.
      
      





または、例えば私の設定ファイルで素晴らしい行を見つけることができます:



 ve"aydeBvE"by
      
      





これからどのような結論を導き出すことができますか?



ウィキペディアは啓発します:

難解な言語に固有の共通の特性は、そのプログラムのテキストが「開始者」によってのみ理解されるか、まったく理解できないことです。



すなわち 私はvim 誰によっても研究されるべきではないと思います。 誰もBrainfuckで書くことは誰にとっても人生を楽にすると主張しないように。 しかし、あなたに十分な自由時間があり、あなた(私のように)珍しいものが好きな場合は、この難解な科学-vimの所有について簡単に紹介します。 少し予約を入れますが、ビルトインスクリプト言語vimであるvimscriptについては説明しません。 それは、vimコマンドを個別のプログラミング言語として表現することだけです。



vimでさまざまな操作モードについて記述することは意味がありません。実際、必要なモードはコマンドモードだけです。 テキスト入力モードは、テキスト入力機能でコマンドモードを過負荷にしないためにのみ必要であると言うことさえできます。 したがって、チームの能力に応じて、別の原則に従って資料をグループ化します。



テキスト移動コマンド



私の意見では、この機能の詳細を十分に検討したうえで、vimに慣れる必要があります。 私が定期的に使用しているものの短いリスト:



h、j、k、l-カーソルをそれぞれ左、下、上、右に1文字移動します。

/ word-カーソルをテキスト内の単語wordの位置に移動します(未開始者が検索と呼ぶもの)。

?word-逆方向に検索します(はい、私も初心者です)。



これ以降、良い方法では、検索の代わりに移動することで文言を残す必要があります(これがコマンドのキーポイントであるため)が、このような長いフレーズに対しては私は面倒です。

n-テキスト内の検索から単語の次の位置に移動します。

Nは反対方向でも同じです。

*-カーソルの下の単語を検索します。

#反対方向でも同じです。

f [az]-パラメータとして渡された文字の行の位置に移動します。

F [az]は反対方向でも同じです。

w、b-単語をそれぞれ前方、後方に移動します。

m [az]-渡された文字の名前をパラメーターとしてテキストにブックマークを付けます。

`[az]-名前でブックマークに移動します。

()-前の、次の文に移動します。

{}-前、次の段落に移動します。

%-対応するブラケット(){} []に移動します(開始から終了、およびその逆)。



それを覚えるのは難しくて退屈なので、日常のタスクで使用する必要があります。 タイピングに触れることを学んだのと同じ方法で、絶え間ないトレーニングを通して、これらのコマンドを手に覚えさせます。



追加の編集コマンド。 それらは別のカテゴリーに区別できますが、移動コマンドがなければ役に立たないでしょう。 さらに、それらは非常に少数です。 実際には、通常、次の3つに制限できます。

d-テキスト入力モードに移行せずに削除します。

c-テキスト入力モードに移行して削除します。

y-変更せずにテキストをコピーします。

v-テキストを選択します。



最後の2つは編集コマンドに完全には適合しませんが、最初の2つと同様に動作します。



編集および移動コマンドの一部のバンドルは、補助選択モードで動作します-v。 すなわち 最初に必要なコードを選択してから削除します。



いくつかの例:

de-単語を削除する

v / a <Enter> d-現在の位置から文字「a」の最初の位置まで削除します

dta-文字「a」の文字列の最初の位置まで削除します



変数



vimの変数はレジスタと呼ばれます。 いくつかの特殊レジスターがあります。

0は最後にコピーされたテキストです。

+-クリップボードからのテキスト。



そしてazという名前で、その内容はコマンド「[az]が編集コマンドにパラメーターとして追加されました。つまりve」によって明示的に設定されますay-単語を選択し、それをレジスタaにコピーします。 名前を大文字ve "Ay。で指定することにより、レジスタの内容にテキストを追加できます。

すべてのレジスターの内容は、次のコマンドで表示できます。



マクロ



私の意見では、最も有用なのは難解な言語の機能です。 通常の言語の手順の類似物。 まれにしか言及されないが、私が非常に頻繁に使用する機能。



マクロテキストは名前付きレジスタに保存され、名前で呼び出すことができます。

q [az]-記録を開始する

q-記録を停止

@ [az]-マクロを実行します(プロシージャを呼び出します)



たとえば、次のテキストve "Ayを名前付きレジスタbに入れてから@bと入力すると、カーソルの下の単語がケースAに追加されます。したがって、qbve" Ayqコマンドシーケンスは、コマンドの並列実行でレジスタbにマクロを書くことに似ています(つまり、記録プロセス中に結果を確認できます)。



再起動



すべての編集コマンドとマクロは、パラメーター(反復回数)を使用して実行できます。 たとえば、5de-5つの単語を削除し、5 @ b-マクロbを5回実行します。 「。」もあります。 -最後に実行されたコマンドの繰り返し。 すなわち 5de。 -10個の単語を削除します。





最初の知り合いについては、十分だと思います。 結論として、小さな例を示します。 列と対応するテーブルのリストがあるとしましょう:



Col1、Table1

Col2、Table2

Col3、Table3

...



そして、結果を1つのデータセットに結合する(つまり、すべてを結合する)ペアごとにselectを記述します。 もちろん、この問題は他の適切な方法で解決できます。 そして、適切な方法でそれを解決することがさらに良いです。 しかし、それは単純すぎます。



プログラムのテキストは次のようになります。



 qq0iselect <Esc>,s from<Esc> union all<Esc>0q2@q
      
      





何が残されているかについてのいくつかの言葉



1.プラグインvim。

2. VimScript。

3.エド。

4.興味深いチームの別の束。



VimScriptは、vimに組み込まれたスクリプト言語です(既に説明したとおり)。 Edはvimに組み込まれたテキストエディターです(おそらくあまり正確に表現されていませんが、本質はこれに近いです)。 構文は完全に分離されていますが、ある程度、sedユーティリティに精通している人なら誰でも使い慣れています。 edでは、行の移動/削除、画面上での表示、その他の機能があります。



以上です。 ハッピーバイミング!



All Articles