-
-
Save dohq/1dc702cc0b46eb62884515ea52330d60 to your computer and use it in GitHub Desktop.
function fzf-ssh () { | |
local selected_host=$(grep "Host " ~/.ssh/ssh_config | grep -v '*' | cut -b 6- | fzf --query "$LBUFFER" --prompt="SSH Remote > ") | |
if [ -n "$selected_host" ]; then | |
BUFFER="ssh ${selected_host}" | |
zle accept-line | |
fi | |
zle reset-prompt | |
} | |
zle -N fzf-ssh | |
bindkey '^s' fzf-ssh |
Working like a charm, thank you very much!
i created a slightly updated version of your gist:
function fzf-ssh () {
local selected_host=$(grep "Host " ~/.ssh/config | \grep -v '*' | cut -b 6- | awk '{print $1}' | fzf +s --query "$LBUFFER" --prompt="SSH Remote > ")
if [ -n "$selected_host" ]; then
BUFFER="ssh ${selected_host}"
zle accept-line
fi
zle reset-prompt
}
zle -N fzf-ssh
bindkey '^s' fzf-ssh
=> where i get the 1st string after the Host because you could have something like this in you config:
Host Server1-prod Production
and this would make your ssh session fail with: Production no such command
=> also added +s
in the fzf command to sort the Fuzzy Finder window
I also tweaked the grep query a bit, since it was producing some odd results on my .ssh/config. Here's the before and after on the grep.
Here's the BEFORE:
github.com github
unifi unifi.lan
setup.unifi.com
storage
calamansi
reverse-proxy
t 192.168.86.68
Note that lines 1, 2, and7 are incorrect, and the '*' entry is missing (which is probably a good thing). Line 7 actually comes from a commented out section in my config:
# Host 192.168.86.68
# Ciphers 3des-cbc
# KexAlgorithms +diffie-hellman-group1-sha1
Now here's the AFTER:
*
github.com
unifi
setup.unifi.com
storage
calamansi
reverse-proxy
Here's my modified version of your zsh function:
setopt no_flow_control
function fzf-ssh () {
local selected_host=$(grep "^Host " ~/.ssh/config | awk '{print $2}' | fzf --no-sort --query "$LBUFFER" --prompt="SSH Remote > ")
if [ -n "$selected_host" ]; then
BUFFER="ssh ${selected_host}"
zle accept-line
fi
zle reset-prompt
}
zle -N fzf-ssh
bindkey '^s' fzf-ssh
I didn't understand last statement place in /tmp/.zshrc then try executing ZDOTDIR=/tmp/ zsh. my .zshrc is in my home directory .. why do i put in tmp directory that i didn't get.
BTW thanks for the help