Super User is a question and answer site for computer enthusiasts and power users. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I have defined my own custom vim file type with highlighting etc. I would like to open it using the terminal based vim when I double click on it. I am using mac os x. Any pointers on how to start on this?

share|improve this question
up vote 10 down vote accepted

Create an Automator Application to run the following 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

Save the automator application. (eg. name it Vim Launcher)

Right click (or control-click) on your custom vim-type file (eg. use .vim as the extension) and under Open With… choose the bottom option Other… and find your Automator Application (eg. Vim Launcher), double-click it.

Boom.

share|improve this answer
    
To create in Automator, you can click New Document, select the Application template. In the Actions->Library tab, click Utilities, then Run AppleScript. – cevaris Aug 24 '14 at 15:51
    
Doesn't work in Yosemite. – keyvan Jan 30 '15 at 8:10
    
I got things working in Yosemite, though I use iTerm: thepugautomatic.com/2015/02/open-in-iterm-vim-from-finder – Henrik N Feb 1 '15 at 10:39
    
works for me in Yosemite. there is one strange edge case, though-- – ILI4S K4RIM May 22 '15 at 23:58
    
if there is already a terminal open and I open a file, it opens a new terminal window (as expected). but if I open a new tab in that terminal window, that tab tries to open the same file. – ILI4S K4RIM May 22 '15 at 23:59

From the five or so minutes I spent playing with it to see if it would I couldn't find a built -in option to do so.

However, you can probably write a simple Applescript that will take the files absolute path and then run vim {path} in a bash shell.

share|improve this answer
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

I use this AppleScript instead. It activates Terminal.app after (not before!) execution to stop things from acting odd when using Spaces. It also closes the window after Vim exits. Just set Terminal.app to close after clean exits.

share|improve this answer

I just wanted to add a comment to the accepted answer with the code changes needed to make it work in Yosemite, but since I don't have sufficient reputation couldn't add a comment, and hence attempting to reply via an answer.

The "Open File in Terminal from Finder" script was working fine in Mavericks, but it stopped working after the upgrade to Yosemite. In Yosemite, the code in the accepted answer would work only the first time - meaning when I double click the first file in the Finder, it opens fine, but when I click the subsequent files, they would just open blank new terminal windows (vim won't open) with command prompt.

After going through multiple sites, cobbled together a version that works just fine. I am sure there is a better way to do it, but I have no experience with Applescript and so will leave it to others to suggest any improvements.

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
share|improve this answer

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .