MicroでPythonで書かれたコードを保存する時に、自動でコードフォーマッターのYAPFとリンターのFlake8が実行するようにしてみます。
※コードフォーマッターがコードを整形し、リンターがコードの書き方の問題点を調べます
google/yapf: A formatter for Python files
Flake8: Your Tool For Style Guide Enforcement — flake8 7.1.0 documentation
最初に上記のライブラリをインストールするためのpipxをインストールします。
pypa/pipx: Install and Run Python Applications in Isolated Environments
$ sudo apt update $ sudo apt install pipx $ pipx --version
1.1.0
pipxのインストールが終了しましたら、今後導入するライブラリ用のパスを設定します。
$ pipx ensurepath $ source ~/.bashrc
※ zshを使用している場合は、.zshenvに
export PATH="$PATH:/home/pi/.local/bin"
を追加した後、
$ source .zshenv
を実行してpipx用のパスを通しておきます。
下記コマンドを実行して、YAPFとFlake8のインストールを行います。
$ pipx install yapf $ yapf --version
yapf 0.43.0
$ pipx install flake8 $ flake8 --version
7.1.1 (mccabe: 0.7.0, pycodestyle: 2.12.1, pyflakes: 3.2.0) CPython 3.11.2 on Linux
MicroでPythonのコードが書かれたファイルを保存した時に自動でYAPFとFlake8を実行するようにします。
$ ~/.config/micro/init.lua
local micro = import("micro")
local shell = import("micro/shell")
function onSave(bp)
if bp.Buf:FileType() == "python" then
bp:Save()
local _, err = shell.RunCommand("yapf -i " .. bp.Buf.Path)
if err ~= nil then
if type(err) ~= "userdata" then
micro.InfoBar():Error(err)
end
return
end
_, err = shell.RunCommand("flake8 " .. bp.Buf.Path)
if err ~= nil then
if type(err) ~= "userdata" then
micro.InfoBar():Error(err)
end
return
end
bp.Buf:ReOpen()
end
end
※ init.luaが既にある場合はコードを適宜修正してください。
補足1
python-lsp-server(pylsp)の設定
$ pipx install python-lsp-server $ pylsp -V
pylsp v1.12.0
$ micro -plugin install lsp $ micro ~/.config/micro/settings.json
{
...
"lsp.autocompleteDetails": true,
"lsp.server": "python=pylsp",
...
}
※ ...はsettings.jsonで他に追加している設定
※ lsp.autocompleteDetailsをtrueにしておくと、後ほど触れますCtrtl + Space(スペース)の際に表示が見やすくなります。
settings.jsonの編集の後にMicroを起動してみると、~/.config/micro/bindings.jsonに今回のプラグイン用のキーバインドが追加されています。
{
"Alt-d": "command:definition",
"Alt-f": "command:format",
"Alt-k": "command:hover",
"Alt-r": "command:references",
"CtrlSpace": "command:lspcompletion",
}
Microで.pyの拡張子のファイルを開き、コードの作成途中で、Ctrl + Space(スペース)を押すと、

のような入力補完の機能が使えるようになります。
Ctrl + Spaceで候補を選択肢、Spaceを押すことで決定できます。

関数やメソッドを追加した後にAlt + kを押すと、選択したコードの説明文が出力されるようになります。
補足2
Ctrl + rでPythonのコードを実行できるようにinit.luaを改修します。
local micro = import("micro")
local config = import("micro/config")
local shell = import("micro/shell")
function init()
config.TryBindKey("Ctrl-r", "lua:initlua.run", true)
end
function run(bp)
if bp.Buf:FileType() == "python" then
shell.RunInteractiveShell("python3 " .. bp.Buf.Path, true, false)
end
end
function onSave(bp)
bp:Save()
if bp.Buf:FileType() == "python" then
local _, err = shell.RunCommand("yapf -i " .. bp.Buf.Path)
if err ~= nil then
if type(err) ~= "userdata" then
micro.InfoBar():Error(err)
end
return
end
_, err = shell.RunCommand("flake8 " .. bp.Buf.Path)
if err ~= nil then
if type(err) ~= "userdata" then
micro.InfoBar():Error(err)
end
return
end
bp.Buf:ReOpen()
end
end