Mac OS X:如何在双击文件时在终端中打开 vim

Mac OS X:如何在双击文件时在终端中打开 vim

我已经定义了自己的自定义 vim 文件类型,并带有突出显示等功能。我想在双击它时使用基于终端的 vim 打开它。我使用的是 mac os x。有没有关于如何开始的指示?

答案1

创建一个 Automator 应用程序来运行以下 applescript:

on run {input}
   set the_path to POSIX path of input
   set cmd to "vim " & quoted form of the_path
   tell application "System Events" to set terminalIsRunning to exists application process "Terminal"
   tell application "Terminal"
      activate
      if terminalIsRunning is true then
         do script with command cmd
      else
         do script with command cmd in window 1
      end if
   end tell
end run

保存自动化应用程序。(例如将其命名为Vim 启动器

右键单击(或按住 Control 键单击)您的自定义 vim 类型文件(例如使用.vim作为扩展)并在打开用…选择底部的选项其他…并找到你的 Automator 应用程序(例如Vim 启动器),双击它。

繁荣。

答案2

我花了大约五分钟来玩它,看看它是否能做到,但我找不到内置选项来做到这一点。

但是,您可以编写一个简单的 Applescript,它将获取文件的绝对路径,然后vim {path}在 bash shell 中运行。

答案3

set the_path to POSIX path of input
   set cmd to "vim " & quoted form of the_path & "; exit"
   tell application "System Events" to set terminalIsRunning to exists application process "Terminal"
   tell application "Terminal"
      if terminalIsRunning is true then
         do script with command cmd
      else
         do script with command cmd in window 1
      end if
      activate
   end tell
end run

我改用这个 AppleScript。它在执行后(而不是之前!)激活 Terminal.app,以防止使用 Spaces 时出现异常。它还会在 Vim 退出后关闭窗口。只需将 Terminal.app 设置为在干净退出后关闭即可。

答案4

我只是想在已接受的答案中添加一条评论,其中包含使其在 Yosemite 中运行所需的代码更改,但由于我没有足够的声誉,无法添加评论,因此尝试通过答案进行回复。

“从 Finder 在终端中打开文件”脚本在 Mavericks 中运行良好,但在升级到 Yosemite 后停止工作。在 Yosemite 中,接受的答案中的代码仅在第一次运行 - 这意味着当我双击 Finder 中的第一个文件时,它会正常打开,但当我单击后续文件时,它们只会打开带有命令提示符的空白新终端窗口(vim 不会打开)。

在浏览了多个网站后,我拼凑了一个可以正常工作的版本。我确信有更好的方法,但我没有使用 Applescript 的经验,因此将留给其他人来提出任何改进建议。

on run {input}
    set the_path to POSIX path of input
    -- set cmd to "vim " & quoted form of the_path
    -- we can do a change directory to make NerdTree happy
    set cmd to "clear;cd `dirname " & the_path & "`;vim " & quoted form of the_path & "; exit"

    tell application "System Events" to set terminalIsRunning to exists application process "Terminal"
    tell application "Terminal"
        if terminalIsRunning is true then
            -- CHANGED code starts --
            set newWnd to do script with command cmd
            do script with command cmd in newWnd
            -- CHANGED code ends --
        else
            do script with command cmd in window 1
        end if
        activate
    end tell
end run

相关内容