macvim-dev / macvim-dev/macvim
Feature Request: detect and reuse MacVim instance to open file by mvim:// url
Chưa có ai nhận issue này.
- Ngôn ngữ chính
- Vim Script
- Star
- 7.9k
- Fork
- 691
- Chỉ số merge pull request
- Không có pull request nào được merge trong 30 ngày
Mô tả
Greeting!
I configure mvim:// in React Developer Tools to open file in MacVim from the browser extension.
mvim://open?url=file://{path}&line={line}
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:
| file | is editing or has been opened | result |
|---|---|---|
| a.js | editing | 😃 get opened in the right instance |
| b.js | has been opened | 😃 ditto |
| c.js | neither | 💔 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 session
export PATH=/Applications/MacVim.app/Contents/bin:$PATH
open_file()
{
if [[ -n $1 ]]; then
mvim --servername THE_SERVER_NAME --remote-send "<c-w>:tabedit $1<CR>"
fi
if [[ -n $2 ]]; then
mvim --servername THE_SERVER_NAME --remote-send "$2G"
fi
}
SERVERS=`mvim --serverlist | grep -i THE_SERVER_NAME | awk '{print tolower($0)}'`
for server in $SERVERS; do
if [[ $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 tell
END
open_file $1 $2
exit 0
fi
done
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!
Hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Hướng nghiên cứu
Issue đề cập đến việc xử lý URL mvim:// và lựa chọn instance/server của MacVim, nhưng không có file mã nguồn hay test nào. Hãy bắt đầu bằng cách xác định entry point của URL và logic chọn một instance MacVim hiện có. Công việc được xem là hoàn tất khi một file chưa được mở có thể dùng lại instance hiện có phù hợp, với coverage cho các trường hợp được báo cáo là a.js, b.js và c.js.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- bash, macos, vim
- Lĩnh vực
- desktop
- Loại issue
- Tính năng
- Độ khó
- 5/5
- Thời gian dự kiến
- Hơn một tuần
- Mức độ hoạt động
- Đình trệ
- Độ rõ ràng
- Khá rõ ràng
- Mức phù hợp với người mới
- 30/100