Skip to content

Feature Request: detect and reuse MacVim instance to open file by mvim:// url #1402

Description

@UncleBill

Greeting!

I configure mvim:// in React Developer Tools to open file in MacVim from the browser extension.

mvim://open?url=file://{path}&line={line}
image

It works good, but there's a small issue. The issue is that MacVim doesn't reuse the instance that I opened if the target file hasn't been opened. For example, I launch MacVim from /path/to/my-project, and I open files /path/to/my-project/{a,b,c}.js from React Developer Tools. They have different results:

fileis editing or has been openedresult
a.jsediting😃 get opened in the right instance
b.jshas been opened😃 ditto
c.jsneither💔 get opened in a new instance

I hope the c.js can be opened like a.js and b.js.

I have a workaround in favor of Raycast Script Command deeplinks. My script launch MacVim with specified servername, the launched instance will be reuse if I execute the script again. Here it is (I have multiple ones generated by another script):

#!/bin/bash# Required parameters:# @raycast.schemaVersion 1# @raycast.title Vim Launch# @raycast.mode silent# Optional parameters:# @raycast.icon ✅# @raycast.packageName vim-launch# @raycast.argument1 { "type": "text", "placeholder": "file path", "optional": true }# @raycast.argument2 { "type": "text", "placeholder": "line number", "optional": true }# Documentation:# @raycast.description Open vim startify sessionexport PATH=/Applications/MacVim.app/Contents/bin:$PATHopen_file()
{
if [[ -n$1 ]];then
mvim --servername THE_SERVER_NAME --remote-send "<c-w>:tabedit $1<CR>"fiif [[ -n$2 ]];then
mvim --servername THE_SERVER_NAME --remote-send "$2G"fi
}
SERVERS=`mvim --serverlist | grep -i THE_SERVER_NAME | awk '{print tolower($0)}'`forserverin$SERVERS;doif [[ $server=="THE_SERVER_NAME" ]];then
osascript >/dev/null <<END tell application "System Events" to tell process "MacVim" set frontmost to true windows where title ends with "THE_SERVER_NAME" if result is not {} then perform action "AXRaise" of item 1 of result end tellEND
open_file $1$2exit 0
fidone
LANG=en_US.UTF-8 mvim --servername THE_SERVER_NAME +SLoad\ THE_SERVER_NAME >/dev/null 2>&1# wait for server registration
sleep 1
open_file $1$2

With this script, I replace mvim:// url with Raycast's deeplink:

raycast://script-commands/vim-launch?arguments={path}&arguments={line}

It's fixed! However it would be better to have native support in MacVim.

I would suggestion to add feature to detect the instance I want to open file with (like if the opening file path is in the working directory of an instance, the closest one), or add another parameter to specified the instance.

Thanks!

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions