Tmux 명령어의 자동완성 기능을 사용하는 방법을 알아보고, 실습을 통해 쉽게 적용하고 사용할 수 있습니다.
Tmux Logo |
Tmux 명령어의 자동완성 기능을 사용하는 방법을 알아보고, 실습을 통해 쉽게 적용하고 사용할 수 있습니다.
리눅스의 bash shell에서 tmux 명령어 자동 완성 기능을 사용하기 위해 설정합니다.
bash-completion 패키지를 먼저 설치해야 하며, 아래 작성된 매뉴얼을 통해 알아봅니다.
실습 환경
- 운영 체제(OS) : CentOS 8
- 실행 계정 : root
사전 작업 참조하기
[리눅스] CentOS 8 리눅스 명령어 자동 완성 설정하기
tmux bash completion 파일 생성하기
vi를 사용해서 tmux 파일을 열어서 편집합니다.
[vi /etc/bash_completion.d/tmux]
tmux 명령어 자동 완성 기능을 사용하기 위해 아래 내용을 입력합니다.
[#!/usr/bin/env bash # START tmux completion function _tmux_complete_client() { local IFS=$'\n' local cur="${1}" && shift COMPREPLY=( ${COMPREPLY[@]:-} $(compgen -W "$(tmux "$@" list-clients -F '#{client_tty}' 2> /dev/null)" -- "${cur}") ) options="" return 0 } function _tmux_complete_session() { local IFS=$'\n' local cur="${1}" && shift COMPREPLY=( ${COMPREPLY[@]:-} $(compgen -W "$(tmux "$@" list-sessions -F '#{session_name}' 2> /dev/null)" -- "${cur}") ) options="" return 0 } function _tmux_complete_window() { local IFS=$'\n' local cur="${1}" && shift local session_name="$(echo "${cur}" | sed 's/\\//g' | cut -d ':' -f 1)" local sessions sessions="$(tmux "$@" list-sessions 2> /dev/null | sed -re 's/([^:]+:).*$/\1/')" if [[ -n "${session_name}" ]]; then sessions="${sessions} $(tmux "$@" list-windows -t "${session_name}" 2> /dev/null | sed -re 's/^([^:]+):.*$/'"${session_name}"':\1/')" fi cur="$(echo "${cur}" | sed -e 's/:/\\\\:/')" sessions="$(echo "${sessions}" | sed -e 's/:/\\\\:/')" COMPREPLY=( ${COMPREPLY[@]:-} $(compgen -W "${sessions}" -- "${cur}") ) options="" return 0 } function _tmux_complete_socket_name() { local IFS=$'\n' local cur="${1}" && shift COMPREPLY=( ${COMPREPLY[@]:-} $(compgen -W "$(find /tmp/tmux-$UID -type s -printf '%P\n')" -- "${cur}") ) options="" return 0 } function _tmux_complete_socket_path() { local IFS=$'\n' local cur="${1}" && shift COMPREPLY=( ${COMPREPLY[@]:-} $(compgen -W "$(find /tmp/tmux-$UID -type s -printf '%p\n')" -- "${cur}") ) options="" return 0 } __tmux_init_completion() { COMPREPLY=() _get_comp_words_by_ref cur prev words cword } _tmux() { local cur prev words cword; if declare -F _init_completion >/dev/null 2>&1; then _init_completion else __tmux_init_completion fi local index=1 # Check tmux options that will change completion for: # - available sessions # - available windows # - ... local argv=( "${words[@]:1}" ) local OPTIND OPTARG OPTERR=0 flag tmux_args=() while getopts "L:S:" flag "${argv[@]}"; do case "$flag" in L) tmux_args+=(-L "$OPTARG") ;; S) tmux_args+=(-S "$OPTARG") ;; *) ;; esac done # Completed -- have a space after if [[ ${#words[@]} -gt $OPTIND ]]; then local tmux_argc=${#tmux_args[@]} (( index+=tmux_argc )) (( cword-=tmux_argc )) fi if [[ $cword -eq 1 ]]; then COMPREPLY=($( compgen -W "$(tmux start\; list-commands | cut -d' ' -f1)" -- "$cur" )); return 0 else case ${words[index]} in -L) _tmux_complete_socket_name "${cur}" ;; -S) _tmux_complete_socket_path "${cur}" ;; attach-session|attach) case "$prev" in -t) _tmux_complete_session "${cur}" "${tmux_args[@]}" ;; *) options="-t -d" ;; esac ;; detach-client|detach) case "$prev" in -t) _tmux_complete_client "${cur}" "${tmux_args[@]}" ;; *) options="-t" ;; esac ;; lock-client|lockc) case "$prev" in -t) _tmux_complete_client "${cur}" "${tmux_args[@]}" ;; *) options="-t" ;; esac ;; lock-session|locks) case "$prev" in -t) _tmux_complete_session "${cur}" "${tmux_args[@]}" ;; *) options="-t -d" ;; esac ;; new-session|new) case "$prev" in -t) _tmux_complete_session "${cur}" "${tmux_args[@]}" ;; -[n|d|s]) options="-d -n -s -t --" ;; *) if [[ ${COMP_WORDS[option_index]} == -- ]]; then _command_offset ${option_index} else options="-d -n -s -t --" fi ;; esac ;; refresh-client|refresh) case "$prev" in -t) _tmux_complete_client "${cur}" "${tmux_args[@]}" ;; *) options="-t" ;; esac ;; rename-session|rename) case "$prev" in -t) _tmux_complete_session "${cur}" "${tmux_args[@]}" ;; *) options="-t" ;; esac ;; has-session|has|kill-session) case "$prev" in -t) _tmux_complete_session "${cur}" "${tmux_args[@]}" ;; *) options="-t" ;; esac ;; source-file|source) _filedir ;; suspend-client|suspendc) case "$prev" in -t) _tmux_complete_client "${cur}" "${tmux_args[@]}" ;; *) options="-t" ;; esac ;; switch-client|switchc) case "$prev" in -c) _tmux_complete_client "${cur}" "${tmux_args[@]}" ;; -t) _tmux_complete_session "${cur}" "${tmux_args[@]}" ;; *) options="-l -n -p -c -t" ;; esac ;; send-keys|send) case "$option" in -t) _tmux_complete_window "${cur}" "${tmux_args[@]}" ;; *) options="-t" ;; esac ;; esac # case ${cmd} fi # command specified if [[ -n "${options}" ]]; then COMPREPLY=( ${COMPREPLY[@]:-} $(compgen -W "${options}" -- "${cur}") ) fi return 0 } # http://linux.die.net/man/1/bash complete -F _tmux tmux # END tmux completion]
tmux bash completion 적용하기
source 명령을 사용해서 tmux 파일 내용을 적용합니다.
[source /etc/bash_completion.d/tmux]
- [message]
- ##info-circle## 참조하기!
- 실시간 적용을 위해 source 명령을 사용했으며, 이후 로그인 시 자동으로 적용됩니다.
tmux 명령어 뒤에 Tab 키 입력으로 명령어 자동 완성 확인하기
[root@RunIT ~]# tmux attach-session clock-mode display-panes kill-window list-panes move-window previous-window rotate-window set-buffer show-messages swap-window bind-key command-prompt find-window last-pane list-sessions new-session refresh-client run-shell set-environment show-options switch-client break-pane confirm-before has-session last-window list-windows new-window rename-session save-buffer set-hook show-window-options unbind-key capture-pane copy-mode if-shell link-window load-buffer next-layout rename-window select-layout set-option source-file unlink-window choose-buffer delete-buffer join-pane list-buffers lock-client next-window resize-pane select-pane set-window-option split-window wait-for choose-client detach-client kill-pane list-clients lock-server paste-buffer resize-window select-window show-buffer start-server choose-tree display-menu kill-server list-commands lock-session pipe-pane respawn-pane send-keys show-environment suspend-client clear-history display-message kill-session list-keys move-pane previous-layout respawn-window send-prefix show-hooks swap-pane
마무리
tmux 명령어 입력 후 Tab키 입력 시 자동 완성 옵션이 표시되는 것을 확인 할 수 있습니다.
tmux 명령어를 사용하기 편하도록 명령어 자동 완성 사용 방법을 알아보고 쉽게 사용할 수 있습니다.
COMMENTS