#!/bin/bash # # Author: Cody Hiar # Date: 2017-04-22 # # Purpose: The purpose of this script is to accept a file name then find a tmux # pane that is currently running either vim or neovim and tell that pane to open # up the file. This script is meant to be used with a fuzzy find such as fzf so # that you can use an external fuzzy finder but still integrate it with vim # # Set options: # e: Stop script if command fails # u: Stop script if unset variable is referenced # x: Debug, print commands as they are executed # set -eu # Immutable globals readonly ARGS=( "$@" ) readonly PROGNAME=$(basename "$0") readonly USAGE=$(cat << EOF usage: $PROGNAME file_name Script that will search for a tmux pane running vim and will tell vim to open a file specified by the passed in arguement OPTIONS: -h Display help options EOF ) # Function for processing arguments cmdline() { while getopts "h" FLAG; do case "$FLAG" in h) echo "$USAGE" exit 0 ;; *) exit 0 ;; esac done } # Main loop of program main() { if [[ -z ${ARGS[0]} ]]; then exit fi cmdline "${ARGS[@]}" panes=($(tmux list-panes| awk -F: '{ print $1 }')) for pane in "${panes[@]}"; do pane_tty=$(tmux display -p -t "$pane" '#{pane_tty}') ps -o state= -o comm= -t "$pane_tty" \ | grep -iqE '^[^TXZ ]+ +(\\S+\\/)?g?(view|n?vim?x?)(diff)?$' &> /dev/null if [[ "$?" == 0 ]]; then filename="${ARGS[0]}" tmux send-keys -t "$pane" ":e $filename" Enter tmux kill-pane # tmux select-pane -t "$pane" fi done } main