Mac × AlfredでNeovimとVimをGUIかのように使う
何がしたいの
Macで Neovim
や Vim
をGUIライクに立ち上げたい
できたもの
Alfredから、 Neovim
Vim
の両コマンドでそれぞれがGUIライクに立ち上がる。
著しく便利。
How To
iTerm2には
- Neovimを起動するプロファイル
- Vimを起動するプロファイル
の2つを作り、
Alfredには、それぞれのプロファイルでiTerm2を起動するように適当なコマンドを作った。
iTerm2の設定
さほど複雑なものではない。
ただし、プロファイル名はあとでAlfred側の設定をするときに必要になるので厳密につけること。
(この通りにつける必要はないが、Alfredのスクリプト内容とは一致する必要がある)
- Neovimという名前のプロファイルを作る
- Commandの設定で、
Send text at start:
をnvim && exit
とする
- Vimという名前のプロファイルを作る
- Commandの設定で、
Send text at start:
をvim && exit
とする
u図はNeovimの例:
Alfredの設定
こちらはそれぞれのWorkflowを定義して、Apple Scriptを使ってiTerm2の特定のプロファイルを起動している。
任意のプロファイルでiTerm2を起動するコマンド とかも世の中にはあるみたいだけど、
いちいち コマンド名 nvim
みたいに2段階入力するのもちょっと間抜けなので、直接書いてしまうことにした。
- 適当な名前のWorkflowを作る
- Keyword
neovim
の Input Workflow Object を作る
- ここにはアイコンを設定すると良い
- 表記ゆれ(
nvim
など)も登録すると、他のキーワードと衝突する可能性が減らせて良い
- Action Workflow Object を作る
- AppleScriptのやつ
- 中身は後述のスクリプト
- InputとActionを線でつなぐ
スクリプト(Neovim用):
-- this script will start iTerm then open a new session with a "neovim" profile
on is_running(appName)
tell application "System Events" to (name of processes) contains appName
end is_running
set iTermRunning to is_running("iTerm2")
tell application "iTerm"
if not (iTermRunning) then
delay 0.5
close the current window
end if
create window with profile "Neovim"
end tell
ただし、NeovimとVimでWorkflowを分ける必要はないので、2, 3, 4だけやれば良い。
背景
最近VimからNeovimに乗り換えて、おいNeovim悪くないぞNeovim良いじゃないかとなっている。
が、常に :terminal
on Vimで生活している身としては、今まで iTerm2
を起動すれば
Vimが起動して万々歳、で済んでいたところ、
- たまにvim起動したい
- でも概ねNeovim起動したい
みたいな欲があって、どうしたもんかなと。
LinuxとMacで行き来していると、LinuxのランチャはNeovimだろうがvimだろうがalacrittyだろうが任意に呼び出せちゃうので、
Mac側では iTerm2
を起動してプロファイル選んで…とかやってらんない。
Macでも Neovim
と呼び出してNeovimを起動したい。
NeovimuGUIは群雄割拠
詳細は割愛するけれど、vimがGvimとMacVimで大体済んでいるところ、
Neovimは群雄割拠状態。時は戦国時代。
盛んに開発されていたと思ったらある日突然沈黙したり、ちょっと使うには勇気がいるものばかり。
Alfredは必須
なんやかんやいってもMac標準のQuickなんちゃらは使い勝手悪いし、カスタマイズできないんでAlfredを使ってる。
なのでこんかいのアイディアはあくまでもAlfred前提
iTerm2は必須
基本デフォルトが良いじゃないと思いつつ、Mac標準のターミナルは、True Color表示できないので諦め。
Alacrittyは、日本語入力に難があるし、Hi-DPI対応がイマイチなせいでLinux側でまともに使えておらず。
なのでこのアイディアもiTerm2前提。
Discussion