Skip to content

Instantly share code, notes, and snippets.

@LazerPanther
Last active January 27, 2021 23:22
Show Gist options
  • Save LazerPanther/cc14f725730b603ce283 to your computer and use it in GitHub Desktop.
Save LazerPanther/cc14f725730b603ce283 to your computer and use it in GitHub Desktop.
Semantic history command for iTerm2 and Neovim. Allows iTerm integration of Command+Click to open a file in default app (if non-text), or Neovim with optional line number and column. Detects relative paths based on PWD.

Semantic history command for iTerm2 and Neovim.

In iTerm's Preferences > Profiles > Default > Advanced > Semantic History, choose Run command... and enter /your/path/to/iterm_open_with \5 \1 \2.

#!/bin/sh
# iterm_open_with - open a URL, file from CWD, full path, or path with linenumber in default app or Neovim if text file
# For usage with iTerm2:
# In iTerm's Preferences > Profiles > Default > Advanced > Semantic History,
# choose "Run command..." and enter "/your/path/to/iterm_open_with \5 \1 \2".
# Usage: iterm_open_with $(pwd) filename [linenumber]
# $(pwd) = current working directory (either use `pwd` or $PWD)
# filename = filename to open
# lineno = line number
pwd=$1
file=$2
regex='https?://([a-z0-9A-Z]+(:[a-zA-Z0-9]+)?@)?[-a-z0-9A-Z\-]+(\.[-a-z0-9A-Z\-]+)*((:[0-9]+)?)(/[a-zA-Z0-9;:/\.\-_+%~?&@=#\(\)]*)?'
perl -e "if ( \"$file\" =~ m|$regex|) { exit 0 } else { exit 1 }"
if [ $? -ne 0 ]; then
# if it's not a url, try splitting by ':'
arr=($(echo $2 | tr ':' "\n"))
file=${arr[0]}
lineno=${arr[1]:-$3}
colno=${arr[2]:-${3##*:}}
[ -e "$file" ] || file=${pwd}/${file}
fi
file "$file" | grep -q "text"
if [ $? -ne 0 ]; then
/usr/bin/open $file
else
/usr/local/bin/nvim ${file}${lineno:+:${lineno}}${colno:+:${colno}}
fi
@lparry
Copy link

lparry commented Jan 27, 2021

This didn't work as expected for me; nvim was opening, but not in a visible tab/pane. I had to choose "Run coprocess..." and use the command echo /your/path/to/iterm_open_with \5 \1 \2

I would be curious to see how it works via "Run command...", was this a gui version of neovim perhaps?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment