環境
macOS Ventura 13.0
NeoVim v0.8.1
lambdalisue/fern.vim
, lambdalisue/fern-hijack.vim
導入済み
なにがしたいの
いつも通り日本語が崩壊してるのでタイトルの意味がわからないと思います。これ読んでください。
(そうだ、コンフィグでもいじるか)
$ nvim ~/.config/nvim/
(nvim内)
(Fern画面が開く)
:pwd
-> /Users/zoi/Desktop
(デフォルトディレクトリやん...)
(~/.config/nvim 開いといてほしいなあ)
やってみる
ワイ「せや、autocmd
で起動時にいい感じのところにcdすればいいのでは?」
ワイ「引数で指定したパスどうやって取るんやろ」
ワイ「よし、起動時に開いてるFern画面からもらうか」
ネット記事「%
でファイルパス取れるらしいで」
ワイ「なるほどやってみるか」
:echo expand("%")
-> fern://275f276e/file:///Users/zoi/.config/nvim$
ワイ「Fernの自己主張強すぎやろ!」
ワイ「で、でも、このままでもcdできたりは...?」
:execute "cd ".expand("%")
-> E472: コマンドが失敗しました
ワイ「ダメそうですねありがとうございました」
ワイ「せや、file://
以前を全部抹消すればどうや?!」
ネット記事「substitute()
で正規表現置換できるで」
ワイ「これやろ」
:echo substitute(expand("%"), ".*file:\\\/\\\/", "", "g")
-> /Users/zoi/.config/nvim$
ワイ「エスケープめんど...」
ワイ「よくみたら最後に$
あるやん なにこれ?」
ワイ「なんかよくわからんけど消しとくか」
:echo substitute(expand("%"), ".*file:\\\/\\\/\\|\\$$", "", "g")
-> /Users/zoi/.config/nvim
ワイ「いい感じやな」
ワイ「これ今はフォルダ開いてるけど、ファイル開いた時おかしくなったりする?」
$ nvim ~/.config/nvim/init.lua
(nvim内)
:echo substitute(expand("%"), ".*file:\\\/\\\/\\|\\$$", "", "g")
-> /Users/zoi/.config/nvim/init.lua
ワイ「これcd先ちゃう、ファイルパスや」
ワイ「これの親ディレクトリ欲しいなあ」
ワイ「でも、ただ単に/以下切り捨てだとディレクトリを開いた時に親に行ってしまうなあ」
ネット記事「fnamemodify()
便利やで」
ワイ「なるほど」
$ nvim ~/.config/nvim
(nvim内)
:echo fnamemodify(substitute(expand("%"), ".*file:\\\/\\\/\\|\\$$", "", "g"), ":p:h")
-> /Users/zoi/.config/nvim
ワイ「よし、完璧や」
ワイ「あとはこれをautocmd VimEnter *
すれば...」
vim.cmd('augroup cd-on-start')
vim.cmd('autocmd!')
vim.cmd([[autocmd VimEnter * execute ":cd ".fnamemodify(substitute(expand("%"), ".*file:\\\/\\\/\\|\\$$", "", "g"), ":p:h")]])
vim.cmd('augroup END')
ワイ「できたで〜〜」
結論
Luaで書いてますが、中身は完全にVim scriptなので安心してください。Vimでも動くはずです。知らんけど。
(autocmd
をLuaで書く方法をご存知の方がいらっしゃれば教えてください)
vim.cmd('augroup cd-on-start')
vim.cmd('autocmd!')
vim.cmd([[autocmd VimEnter * execute ":cd ".fnamemodify(substitute(expand("%"), ".*file:\\\/\\\/\\|\\$$", "", "g"), ":p:h")]])
vim.cmd('augroup END')
余談?
このままだと以下のような場合にバグりそうな気もします(未確認です)
...めんどくさいので治しません()
$ pwd
/path/to/hoge/
$ ls
huga/ ←ディレクトリ
huga$ ←ファイル
$ nvim hoge$
:pwd
-> /path/to/hoge/huga
正規表現で、ORじゃなくANDにするとか...?