🙌

WindowsのGvimでPythonを活用したvimrcの例

3 min read

JetBrains社のPython Developers Survey 2019 Results によると Python 用のエディタ(とIDE)に使われているソフト上位3位は

  1. PyCharm
  2. VS Code
  3. Vim

とのことです。
私は1.2.の(Python用拡張機能の)実装の多くがPythonではない言語で実装されていることに不満があります。
一方3.のVimは Shougo さんが denite.nvimdefx.nvim といったプラグインの実装の多くをPythonで行われています。
上記から今後いくつかの記事で「PythonでどういったVimのコントロールができるか」をみなさんと情報共有していきたいと思います。

とにかく具体的な手順を示す

まずは「誰もが躓かずに」WindowsのGvimでPythonを活用したvimrcの例を再現できる手順を示します。その手順は下記になります。

  1. https://vim-jp.org/ 右側の「バイナリーダウンロード」から「Windows 64ビット」vim-win32-installer のダウンロード・インストールを行う

  2. https://www.python.org/downloads/windows/ から https://www.python.org/ftp/python/3.8.7/python-3.8.7-amd64.exe のダウンロード・インストールを行う

  3. 1.でインストールしたgvim.exeを起動しコマンドラインで :edit ~/_vimrc を実行し、下記の内容を貼り付けた後 :write しgvimのウインドウを閉じる

    syntax enable
    set pythonthreedll=C:\Users\kozo2\AppData\Local\Programs\Python\Python38\python38.dll
    
    python3 << EOL
    import os
    def print_cwd():
      return os.getcwd()
    EOL
    
    command Pycwd py3do return print_cwd()
    
  4. gvim.exeを再び起動しコマンドラインで:Pycwd を実行する

最後の手順を実行するとカレントバッファにみなさんのホームディレクトリのパスが埋められるかと思います。

手順は以上になります。
次に各手順の詳細を示します。

手順1.について

この手順については特に説明する必要は無いかと思います。

手順2.について

2021/01/01時点では1.のgvimから呼び出せるpythonは https://www.python.org/ftp/python/3.8.7/python-3.8.7-amd64.exe になります。

Anacondaのpythonを呼び出すことはできません。
ですが「Anacondaのpython」と「python.orgのpython」2つのpythonを1windows中にインストールしていただいて問題ありません。
私は「Anacondaのpythonは分析用」「python.orgのpythonはgvim用」と考えています。

インストール時の設定は特にいじらずデフォルト設定のままインストールしています。

手順3.について

ここではgvimの設定ファイル ~/_vimrc について説明します。
まず手順2.でインストールしたpythonがどこにあるかを明示します。
それは

set pythonthreedll=C:\Users\kozo2\AppData\Local\Programs\Python\Python38\python38.dll

のように行います。kozo2はみなさんのユーザ名に置き換えてください。

先の「複数のpythonを1windows中にインストールすることはざらである」昨今の事情からpythonthreedllを設定しています。「gvim.exe 8.2.2211 から DLL の場所をレジストリから取得する機能も入った」とのことで (出典: vim-jp.slack.com コミュニティ情報) pythonthreedllの設定を行わずとも「python.orgのpython」のdllをgvimが見つけてくれる可能性があります。ですが再現性のために「明示的にどのPythonを利用するか」を pythonthreedll を指定することを強く勧めます。

下記は呼び出したpythonで行うことを指定するコードになります。

python3 << EOL
import os
def print_cwd():
  return os.getcwd()
EOL

のように python3 << EOLEOL で 実行したいpythonコードを囲みます。

そして締めに、先のpythonコードをgvimのコマンドラインから呼び出せるように

command Pycwd py3do return print_cwd()

:Pycwd と名付けています。

この後は何を?

この後は「pythonコード」の中に「gvimが持つ情報をいかにして入力するか」を知ることが必要になるでしょう。
またそして得られる「pythonコードの出力」を「いかにしてgvimに渡すか」も知る必要があるでしょう。
この後はそういった「python-gvim間の入出力のつなぎ方」の情報を共有したいと思います。

(後記)
この続きは 「python-gvim間の入出力のつなぎ方」に関するスクラップ で。