🉐️

Mac × AlfredでNeovimとVimをGUIかのように使う

2021/05/10に公開

何がしたいの

Macで NeovimVim をGUIライクに立ち上げたい

できたもの

Alfredから、 Neovim Vim の両コマンドでそれぞれがGUIライクに立ち上がる。

https://youtu.be/WlJ1xk_sXG4

著しく便利。

How To

iTerm2には

  • Neovimを起動するプロファイル
  • Vimを起動するプロファイル

の2つを作り、

Alfredには、それぞれのプロファイルでiTerm2を起動するように適当なコマンドを作った。

iTerm2の設定

さほど複雑なものではない。
ただし、プロファイル名はあとでAlfred側の設定をするときに必要になるので厳密につけること。
(この通りにつける必要はないが、Alfredのスクリプト内容とは一致する必要がある)

  1. Neovimという名前のプロファイルを作る
  • Commandの設定で、 Send text at start:nvim && exit とする
  1. Vimという名前のプロファイルを作る
  • Commandの設定で、 Send text at start:vim && exit とする

u図はNeovimの例:

Alfredの設定

こちらはそれぞれのWorkflowを定義して、Apple Scriptを使ってiTerm2の特定のプロファイルを起動している。
任意のプロファイルでiTerm2を起動するコマンド とかも世の中にはあるみたいだけど、
いちいち コマンド名 nvim みたいに2段階入力するのもちょっと間抜けなので、直接書いてしまうことにした。

  1. 適当な名前のWorkflowを作る
  2. Keyword neovim の Input Workflow Object を作る
  • ここにはアイコンを設定すると良い
  • 表記ゆれ( nvim など)も登録すると、他のキーワードと衝突する可能性が減らせて良い
  1. Action Workflow Object を作る
  • AppleScriptのやつ
  • 中身は後述のスクリプト
  1. 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