Я изо всех сил пытаюсь написать функцию автозаполнения ZSH. Моя цель - автозаполнение первого аргумента ta
и tk
с проектами, перечисленными в tmux list-sessions
tmuxinator list
.
Вот что у меня так далеко:
tmux list-sessions
выводит данные, которые выглядят так:
dotfiles: 1 windows (created Tue Apr 15 21:54:51 2014) [123x48]
goodbye: 1 windows (created Tue Apr 15 21:51:34 2014) [123x48]
hello: 1 windows (created Tue Apr 15 21:42:03 2014) [123x48]
tmuxinator list
:
tmuxinator projects:
dotfiles landonschropp.com
Вот моя попытка:
tmux-list-sessions-autofill() {
# get the tmux and tmuxinator sessions
TMUX_SESSIONS=$( tmux list-sessions | cut -d: -f1 )
TMUXINATOR_SESSIONS=$( tmuxinator list | tail -n +2 | gsed -e 's/\s\+/\n/g' )
# remove duplicates
SESSIONS=$( echo "$TMUX_SESSIONS\n$TMUXINATOR_SESSIONS" | sort | uniq )
# set the autocomplete values
reply=( $(echo $SESSIONS) )
}
compctl -K tmux-list-sessions-autofill ta
compctl -K tmux-list-sessions-autofill tk
tmux list-sessions | cut -d: -f1
удаляет все, кроме имен проектов.tmuxinator list | tail -n +2 | gsed -e 's/\s\+/\n/g'
удаляет первую строку и заменяет пробел символом новой строки.echo "$TMUX_SESSIONS\n$TMUXINATOR_SESSIONS" | sort | uniq
удаляет повторяющиеся строки.- Я использую
gsed
потому что я на OS X, аsed
немного сумасшедший.
Моя функция работает, но она очень медленная. Я новичок в создании сценариев оболочки, поэтому я уверен, что есть более эффективный способ сделать это. Где мое узкое место и как я могу это исправить?