Open6
neovimでperl開発 ー 2024年冬
neovimでperlの開発をしている。
vscodeを使おうと10回くらい試して、vimに戻っている。
vim最高。
人に見せるように整ってはいないけれど、dotfilesはコレ。
人によっては、この情報で十分かもしれない。
使っているプラグイン
- itchyny/lightline.vim
- junegunn/vim-easy-align
- コードフォーマットをする君。コードフォーマットをするなら、formatterを利用するのが良いと思うが、たまに自前で整形したい箇所が出た時に使ってる。
- ibhagwan/fzf-lua
- ファイルを fzfのインターフェイスで探せる。
-
<leader><leader>
で.git配下のファイルを探せるように設定してる。
- 補完関連
- neovim/nvim-lspconfig
- hrsh7th/nvim-cmp
- hrsh7th/cmp-nvim-lsp
- github/copilot.vim
- copilotは補完の枠に収まらない感じはする
- stevearc/oil.nvim
- filer。fzfでファイルを探してるので、ファイルの削除やリネームなどの用途で使うことが多い。vimの操作でファイル操作できて面白い。
- junegunn/goyo.vim
- zenモード用。画面から余計な要素を除いてくれる。気分を変えたい時に使ってる。
- markonm/traces.vim
- 置換するとき便利
- vim-perl/vim-perl
- perl専用のプラグインはコレだけ。
-
このあたりをハイライトするように設定している
- make clean carp highlight-all-pragmas moose test-more try-tiny heredoc-sql object-pad
pluginの数が多くても私は使いこなせないので、
半年、1年経っても、使ってないプラグインは消して、今、生き残っているのがこのあたり。
LSP
- Perl Navigator
- Perl Navigatorについてはこの記事が良い https://gihyo.jp/dev/serial/01/perl-hackers-hub/007602
- typos-lsp
- typoを教えてくれる。便利。
perl 専用の設定
- vim-perlが、subroutine signatureのハイライトをいい感じにしてくれるように
perl_sub_signatures = 1
を設定している - gf でファイルジャンプをいい感じにしてくれるように pathの設定を次のようにしている
- https://github.com/kfly8/dotfiles/blob/main/config/nvim/ftplugin/perl.lua
- perlインタプリタはmiseで管理, モジュールはcarmelかcartonで管理している。
- carmelでインストールしたモジュールにファイルジャンプできるように、
env PERL5OPT="-MCarmel::Setup" perl -e "print join \',\', @{\\$Carmel::MySetup::environment{inc}}"
で設定したいパスを読み込んで、pathに追加しているのがおもしろポイント。
-- 関数: 外部コマンドを実行して結果を取得
local function exec_cmd(cmd)
local handle = io.popen(cmd)
if not handle then
return nil
end
local result = handle:read("*a"):gsub("%s+$", "") -- 改行を削除
handle:close()
return result
end
-- Perl の archname を取得
local perl_arch = exec_cmd('perl -MConfig -e "print \\$Config{archname}"')
if not perl_arch then
vim.notify("Failed to get Perl archname", vim.log.levels.ERROR)
return
end
-- Perl のライブラリパスを取得
local perl_lib = exec_cmd('which perl | perl -pe "s!([^/]+)/bin/perl\n!\\$1/lib/\\$1!"')
if not perl_lib then
vim.notify("Failed to get Perl library path", vim.log.levels.ERROR)
return
end
local perl_lib_arch = perl_lib .. "/" .. perl_arch
-- Carmel 環境がある場合のpathを設定
if vim.fn.isdirectory(".carmel") == 1 then
local perl_carmel = exec_cmd('env PERL5OPT="-MCarmel::Setup" perl -e "print join \',\', @{\\$Carmel::MySetup::environment{inc}}"')
if perl_carmel then
vim.opt_local.path:append(perl_carmel)
else
vim.notify("Failed to get Carmel environment paths", vim.log.levels.WARN)
end
end
-- その他のpathを設定
local additional_paths = {
"lib",
"t/lib",
"blib/lib",
"blib/arch",
"extlib",
"local/lib/perl5",
"local/lib/perl5/" .. perl_arch,
perl_lib,
perl_lib_arch,
"./",
}
vim.opt_local.path:append(table.concat(additional_paths, ","))
その他、雑感
決まりきったことを書くならcopilotの方が編集スピードが早い。
copilotが補完しやすいようにコードを書くことを意識しないとなーと思ってる。
例えば、テストケースだけを書いたテキストをコピーして、それを元にテストコードを書いてもらうなど。
改めて、まとめてみると、手で編集するためのプラグインは減って、コードを移動したり、補完したりするプラグインの方を重視するようになったんだなーと感じた。