自作プラグイン[vim-operator-perl]の紹介です!

みなさん初めまして、skrby1です。
この記事はMacでVimを使っている人向けの記事です。

はじめに

みなさんVim使ってますか?
自分はここ1年ぐらいでVimを使い始めて、色々と便利さを実感している所です。
今回はkanaさんのvim-operator-userを利用して、Perlをオペレーターとして使えるようにしたもののご紹介です!
まだまだ完全自作のプラグインまではたどり着かない感じですね!
便利なプラグインを開発してくれている方たちに感謝です!

vim-operator-userとは?

これは、Vimの中でユーザー自身が好きなオペレーターを定義できるようにしてくれる、
中々通好みのプラグインだと個人的には思っているのですが、
みなさんは使用しているでしょうか?

使い方

それではvim-operator-perlの使い方のご紹介です。

インストール

自分はまだNeoBundleを使用していますので、それ前提で話をさせて頂きます。

まずはkanaさん作のvim-operator-userをインストールします。

NeoBundle "kana/vim-operator-user"

その次に自作のvim-operator-perlをインストールします。

NeoBundle "skrby1/vim-operator-perl"

でOKです。

その後.vimrcに自分のやりやすいキーマップを指定します。
自分の場合は

map <silent> <Space>op <Plug>(operator-perl)

と指定しています。

基本的な使い方

簡単に言うと、シェルでのPerlの操作をそのままVim上で行う感じです。
Perlのワンライナー(わからない方はググってみて下さい)だと思って頂けたら幸いです。m(_ _)m

  • 先ほど指定したキーマップを押します。
  • そしてテキストオブジェクトを指定します。
    (これはビジュアル選択後に指定したキーマップを押す事でも可能です)
  • するとコマンドラインに次のような表示が出ます。ここでまずはPerlに渡すオプションを選択します。([-pe]と入力されていますが、今はそのまま決定でお願いします)
  • 次に本体部分が出ます。ここにPerlでやりたい処理を入力します。
  • 最後にPerlのARGVに何か渡すものがあれば入力します。何もなければ、そのままリターンでOKです。

そうすると指定したテキストオブジェクトをPerlで処理して、Vim上で変更してくれます。
もしPerlの内部でエラーの場合は今の所そのままエラーが出力されるようになっています。
これは今後エラー処理をした方がいいか、逆にこのままの方がいいか悩んでいる所です。
もしPerl内部のエラーが出力された場合はVimの内部で[u]キーでUndoできますので、一旦戻して下さい。

応用的な使い方

なぜ基本的な使い方で入力するものが3つも必要なのか?と訝しげに思った方もおられるかもしれません。
が、これはPerlのワンライナーでできる事はなんでもここからできる様にしたかったからであります。
簡単に言うと、自分でPerlスクリプトを自作して、それをVim上のテキストに適用する事もできます!
Perlはテキスト処理言語として優秀なので、Perlでできる事は多分ほとんどこのプラグインでVim上でできるという訳です。
それなら[:perldo][:perl]で充分じゃないか?と思う方もいらっしゃるとは思いますが、
[:perldo]では適用範囲が1行単位でしか行えないので、自分はこれを自作した次第です。
オペレーターとしてPerlが使えると、1単語単位でも使えるようになります!

Perlの使い方の詳しい事は、Perlのワンライナーをググってもらうとして、
応用編として、ちょっとした遊びに使える、vim-operator-perl専用のライブラリみたいなものを用意させて頂いております。
それを使用してみたいと思います。

  • 基本的な使い方同様に指定したキーマップを押します。
  • 基本的な使い方同様にテキストを選択します。
    (これも基本的な使い方同様ビジュアル選択した後でキーマップを押しても可能です)
  • ここで、最初に入力されている[-pe]のオプションを削除してリターンを押します。
  • ここで、Tabキーを押します。すると、ファイルの候補が表示されます。
  • そこで、ファイル名を選んで、リターンを押します。

それぞれの機能のご説明です。
dict.pl
LPWモジュールを使用して、ネットから選択した単語の意味を拾ってきて表示します。
文章だとGoogle翻訳をブラウザで起動します。
お使いのperlにLWPモジュールがインストールされている事が前提です。
eval.pl
Vim上に書かれているPerlスクリプトをperl内部でevalします。
ARGVでそれぞれの出力位置を指定します。
-2(改行して前に出力)
-1(改行せずに前に出力)
0もしくはARGV無し(選択したテキストと入れ替え)
1(改行せずに後ろに出力)
2(改行して後ろに出力)
です。
evalがうまくいかなかった場合は、=eval error=と出力されます。
now.pl
現在時刻を取得して、選択されたテキストの前や後ろに配置します。
ARGVでそれぞれの出力位置を指定します。
-2(改行して前に出力)
-1(改行せずに前に出力)
0もしくはARGV無し(選択したテキストと入れ替え)
1(改行せずに後ろに出力)
2(改行して後ろに出力)
です。
rpt.pl
選択したテキストの文字をARGVで指定した回数分繰り返します。
ARGVの2つ目があると(テキストでも数値でもなんでもいいです)、1つ目のARGVの回数を最大とした
ランダムな回数分文字を繰り返します。
sfl.pl
選択したテキストの文字をシャッフルします。

このファイル達はNeoBundleを使用していれば、./vim/bundle/vim-operator-perl/lib/以下に入っているので、ご自由に改良してお使い下さい。また/lib/以下に自作のスクリプトを入れておけば、Tabでファイル名が補完されるようになっています。もし面白いor便利な機能のスクリプトを思いついたら、ぜひ自作して試してみてください!もしよかったら自分にも作ったもの分けて頂けたらと思います。(^_^;A

制限など

このプラグインの機能は、シェルからPerlをキックすることで実現していますので、Mac専用となっています。
Winの場合にシェルをVimから起動してPerlを叩く方法が自分ではわかりませんので、Winユーザーの方は申し訳ありませんが、自分のプラグインを参考に自作なさってください!

おわりに

いかがでしたでしょうか?Vimの懐の広さと言うか、自由度の高さと言うか、みたいなものを少しでも感じていただけたら嬉しいです!今回もこのプラグインを作成する環境を与えてくださったkanaさんに感謝です!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です