我尝试了很多方法,但都没有用。
预期结果:我输入一个快捷键,git gui blame 在指针所在的行打开当前文件。
我在 Windows 7 上工作,使用 Sublime 3 Build 3083
首次尝试:自定义构建系统
{ "cmd": [ "C:\\Program Files (x86)\\Git\\cmd\\git.exe" "gui" "blame" "$file"] }
在名为 git_gui_blame.sublime-build 的文件中
然后工具 -> 构建系统 -> git_gui_blame。但是 Ctrl+B 只会显示“无构建系统”
第二次尝试:自定义按键绑定
偏好设置 -> 按键绑定 - 用户
{ "keys": ["ctrl+B"],
"command": "exec",
"args": {
"cmd": [
"C:\\Program Files (x86)\\Git\\cmd\\git.exe",
"gui",
"blame",
?//What to put here ?
]
}
},
我尝试用“$file”替换“?”,灵感来自构建系统的 $file,但出现了这个错误
可以翻译为“文件路径不正确:/path/to/$file:文件或曲目不存在
第三次尝试:自定义插件
import sublime, sublime_plugin, os
class SublimeBlameCommand(sublime_plugin.WindowCommand):
def run(self, **kwargs):
folder_name, file_name = os.path.split(self.window.active_view().file_name())
print(folder_name + " _______ " + file_name)
try:
self.window.active_view().run_command('exec', {'cmd': ['C:\\Program Files (x86)\\Git\\cmd\\git.exe', 'gui', 'blame', file_name], 'working_dir':folder_name, 'shell':False} )
except TypeError:
print("Error in SublimeBlame Plugin")
然后,在“首选项”->“键绑定”-“用户”中
{ "keys": ["ctrl+k"],
"command": "sublime_blame"
},
但是 Ctrl+k 根本没有任何作用。
所以我被困在这里了。我能做些什么不同的事情?我更倾向于尝试第二次,因为我觉得我得到了最接近预期的结果,但我找不到用什么来替换“?”。
答案1
已与以下设备配合使用:
import sublime, sublime_plugin, subprocess, os, ntpath
class GitguiblameCommand(sublime_plugin.TextCommand): def run(self,
edit):
if os.name == "nt":
startupinfo = subprocess.STARTUPINFO()
startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
filepath = self.view.file_name()
dirpath = os.path.dirname(filepath)
filename = ntpath.basename(filepath)
process = subprocess.Popen(('C:\Program Files (x86)\Git\cmd\git.cmd', 'gui', 'blame', filename),cwd=os.path.dirname(filepath),
stdin=subprocess.PIPE, stdout=subprocess.PIPE, startupinfo=startupinfo)
git-gui 似乎将文件名附加到当前工作目录。在其他操作系统上使用 os.path.split 或 os.path.basename。