Vimがコードを作成している間...





Vimの大きさとパワフルさについては長い間触れません-それは長い間知られています。 「ラテン文字のほとんどすべての文字列は、viの構文的に正しいコマンドです」とさえ主張する人もいます。



時にはプログラマーが微妙な力の側面を知っているため、Vimは自分の代わりにコードを書き始め、瞑想やその他の有用な時間を残しています。 そのような便利なものの1つは、別の非常に便利なプラグインを作成することです。 この控えめな論文の後続の行は、これについて正確に述べています。







俳優





実際には、VimとPythonの2つしかありません。 しかし、これらのコンポーネントの相互作用により、1000回の変更と1万回の変換が行われます。 そして、日々の活動の一部をVimに転送したいという願望に再び訪れたとき、redditメインページから投稿を読むためのプラグインを書き始めました。 アイデアは非常に単純です-投稿のリストをjson形式で引き出し、エディターバッファーで書式設定された形式で表示します。 そして、もちろん、この考えは本質的に部分的に教育的でした。



プラグインを作成するための利用可能なオプションとして、Vimscript、Python、Rubyがあります。 Pythonの長所と短所を比較することはできません。Pythonが選ばれたのは、私がそれをよく知っていたからです。



プラグイン:開始





Vimの最もシンプルなプラグインは、拡張子が* .vimのファイルです-ただし、これを行わない方がよいです)プラグインでディレクトリを作成し、 .vim / bundle / (vundleを使用)に配置します。 内部で、ソースを含むプラグインディレクトリを開き、 バンドル'vim-reddit'を追加します。 これらのジェスチャーの後、Vimの起動時にプラグインが起動します。



プラグインのコアは、引き続きVimscript( reddit.vim )で記述されたコードです。 表示される投稿を強調表示する設定と、Pythonコードを呼び出すためのラッパーが含まれます。 主なポイントと「良い形のルール」について簡単に説明します(ただし、私自身はそれらを無視することもあります)。



なぜなら コードではPythonを使用しますが、Vimがこの言語をサポートして構築されていることを確認する必要があります。



if !has('python') echo "Error: Required vim compiled with +python" finish endif
      
      







次に、プラグインが再度ダウンロードされたかどうかを確認する必要があります。 そうでない場合は、私たちの存在を世界に公然と宣言してください。



 if exists('g:vim_reddit_module') finish endif let g:vim_reddit_module = 1
      
      







Pythonモジュール



その後、メインアクションが開始されます。 まず、VimscriptからPythonコードを実行することのひどい秘密を明らかにします。



 function! Reddit() python << EOF # some function main() EOF endfunction
      
      







ブロック内で、リラックスして、いくつかのPythonライブラリを呼び出すことができます) reddit.pyモジュールを作成し( __init__.pyが暗示されます)、jsonの読み込みのすべての作業を行います。 ただし、接続するだけでは機能しません。 pythonはこのモジュールを見つけることができません。 この悲劇的な状況を終了するには、 sys.pathでモジュールへのパスを追加できます:



 import sys, vim sys.path.append(vim.eval("expand('<sfile>:p:h')"))
      
      







evalメソッドがVimコマンドを計算し、結果を返すことを既に推測したと思います)その後、安心してモジュールをインポートできます:



 from reddit import main main()
      
      







さて、 reddit.main()で起こる不名誉に移りましょう。 繰り返しになりますが、jsonのダウンロードに関する面白くない詳細は誰にも飛ばして、機能を直接説明します。 そして、ここの機能のうち、おそらく、バッファでのみ機能します。 実際、ロードされた投稿を追加する現在のバッファは、単純な文字列の配列です。 したがって、クリーニングは次のようになります。



 del vim.current.buffer[:]
      
      







次のような行を追加します。



 vim.current.buffer[0] = "Reddit front page " vim.current.buffer.append(20*"=" + " ")
      
      







モジュールにはこれ以上具体的なものはありません。 プラグインを柔軟でカスタマイズ可能にしたいという私の強い願望だけに注意してください。 これにより、 default.json構成ファイルが表示されます。このファイルには、jsonソースに加えて、(簡単なマッピングによって)選択するデータに関する指示も含まれています。 したがって、理論的には、同様の構造(つまり、特定の属性を持つ一連の投稿)を持つjson形式のニュースフィードを読み取るようにこのプラグインを適合させることが可能です。



ささいなこと





読書をもっと楽しくするために、いくつかの有用な詳細を追加しました。



 setlocal nomodifiable setlocal buftype=nofile call s:reddit_syntax()
      
      







結果として、編集不可能なバッファがあります。 reddit_syntax関数は、虹のすべての色でコンテンツに色を付けます。 彼女はここでスパイされましたが 、1つのグループは例外で、私は自分専用に追加しました。



 syntax match title /^.\{-1,} / highlight title gui=bold guifg=yellowgreen
      
      







このグループはタイトルと呼ばれ、適切な規則に従って記述され、太字で強調表示されます。



おわりに





プラグインはシンプルであまり機能的ではありません(適切な比較の選択方法が、それでもその主な目標を達成しています-私(そして読者の何人か)は、私の控えめなニーズに合わせてVimの変更と改善に関する私の視野を取り戻しました。 まあ、さらに、今ではVimからredditを読むことができます)



プラグインコードは私のリポジトリに投稿されており、 vundleを使用してインストールするのは非常に簡単です。



PS:朝の投稿ははるかに難しいことがわかりました)



All Articles