Tmux এ কমান্ড টাইপ করার সময় কীভাবে ট্যাব সমাপ্তি করবেন?


22

কিছু কমান্ডের ( kill-sessionএবং kill-server) একই উপসর্গ থাকে।
আমি যখন ( prefix:kill-seTab) টাইপ করি তখন tmux আমাকে কোনও ফল দেয় না।
Tmux এর অভ্যন্তরে স্বয়ংক্রিয়ভাবে সমাপ্তির জন্য ওয়াইল্ডম্যানু দেখানোর বিকল্প নেই?

আমি উবুন্টু 12.04 ব্যবহার করছি


আপনি কোন শেল ব্যবহার করছেন? আপনি এটি প্রতিধ্বনি দিয়ে সন্ধান করতে পারেন
laক্লেয়ারভাইভ্যান্ট

1
এটি/bin/bash
কেভ

4
শেল কীভাবে সম্পর্কিত? আপনি যখন Ctrl + B টাইপ করেন : tmux এ, আপনাকে একটি tmux কমান্ড প্রম্পট দেওয়া হয় (যেমন আপনি যখন টাইপ করবেন ঠিক তেমন: ভিআইএম-এ, আপনাকে বাশ প্রম্পট দেওয়া হবে না)) এটি একটি শিম প্রশ্ন নয়, টিএমউक्स প্রশ্ন।
ববপল

ব্যাশ সমাপ্তির উত্তর সহায়ক, তবে tmux এর ভিতরে ব্যবহারের জন্য প্রশ্নের উত্তর দেয় না। আমি অনুমান করছি যেহেতু tmux এর সাথে কাজ করার জন্য উল্লম্ব স্থানের অতিরিক্ত লাইন নেই, এটি কেবল ট্যাশ সমাপ্তির বিকল্পগুলি যেমন ব্যাশের মতো করে না, যদিও এটি আপনি যতটা টাইপ করছেন সেখানে কমপক্ষে সম্পূর্ণ না করে অস্পষ্টতা। তাই লোকেরা শিখতে বাশ অপশনটি ব্যবহার করতে পারে, এবং কুইকিজের জন্য tmux বিকল্পটি ব্যবহার করতে পারে যেখানে তারা জানতে পারে যে তারা কী চায়।
nealmcb

উত্তর:


8

নিম্নলিখিত স্ক্রিপ্টটি টিএমউক্সের জন্য একটি ব্যাশ সমাপ্তি সরবরাহ করে এবং আমি এখনই এটি আমার বাক্সে এটি পরীক্ষা করে দেখেছি এবং এটি দুর্দান্ত কাজ করে। আপনার কম্পিউটারের কোনও ফাইলটিতে স্ক্রিপ্টটি অনুলিপি করুন এবং রাখুন

   source /path/to/tmux_completion.sh

আপনার .bashrcএবং আপনার যেতে প্রস্তুত হওয়া উচিত।


#!/bin/bash

# tmux completion
# See: http://www.debian-administration.org/articles/317 for how to write more.
# Usage: Put "source bash_completion_tmux.sh" into your .bashrc
# Based upon the example at http://paste-it.appspot.com/Pj4mLycDE

_tmux_expand () 
{ 
    [ "$cur" != "${cur%\\}" ] && cur="$cur"'\';
    if [[ "$cur" == \~*/* ]]; then
        eval cur=$cur;
    else
        if [[ "$cur" == \~* ]]; then
            cur=${cur#\~};
            COMPREPLY=($( compgen -P '~' -u $cur ));
            return ${#COMPREPLY[@]};
        fi;
    fi
}

_tmux_filedir () 
{ 
    local IFS='
';
    _tmux_expand || return 0;
    if [ "$1" = -d ]; then
        COMPREPLY=(${COMPREPLY[@]} $( compgen -d -- $cur ));
        return 0;
    fi;
    COMPREPLY=(${COMPREPLY[@]} $( eval compgen -f -- \"$cur\" ))
}

function _tmux_complete_client() {
    local IFS=$'\n'
    local cur="${1}"
    COMPREPLY=( ${COMPREPLY[@]:-} $(compgen -W "$(tmux -q list-clients | cut -f 1 -d ':')" -- "${cur}") )
}
function _tmux_complete_session() {
    local IFS=$'\n'
    local cur="${1}"
    COMPREPLY=( ${COMPREPLY[@]:-} $(compgen -W "$(tmux -q list-sessions | cut -f 1 -d ':')" -- "${cur}") )
}
function _tmux_complete_window() {
    local IFS=$'\n'
    local cur="${1}"
    local session_name="$(echo "${cur}" | sed 's/\\//g' | cut -d ':' -f 1)"
    local sessions

    sessions="$(tmux -q list-sessions | sed -re 's/([^:]+:).*$/\1/')"
    if [[ -n "${session_name}" ]]; then
        sessions="${sessions}
$(tmux -q list-windows -t "${session_name}" | 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}") )
}

_tmux() {
    local cur prev
    local i cmd cmd_index option option_index
    local opts=""
    COMPREPLY=()
    cur="${COMP_WORDS[COMP_CWORD]}"
    prev="${COMP_WORDS[COMP_CWORD-1]}"

    if [ ${prev} == -f ]; then
        _tmux_filedir
    else
    # Search for the command
    local skip_next=0
    for ((i=1; $i<=$COMP_CWORD; i++)); do
        if [[ ${skip_next} -eq 1 ]]; then
            #echo "Skipping"
            skip_next=0;
        elif [[ ${COMP_WORDS[i]} != -* ]]; then
            cmd="${COMP_WORDS[i]}"
            cmd_index=${i}
            break
        elif [[ ${COMP_WORDS[i]} == -f ]]; then
            skip_next=1
        fi
    done

    # Search for the last option command
    skip_next=0
    for ((i=1; $i<=$COMP_CWORD; i++)); do
        if [[ ${skip_next} -eq 1 ]]; then
            #echo "Skipping"
            skip_next=0;
        elif [[ ${COMP_WORDS[i]} == -* ]]; then
            option="${COMP_WORDS[i]}"
            option_index=${i}
            if [[ ${COMP_WORDS[i]} == -- ]]; then
                break;
            fi
        elif [[ ${COMP_WORDS[i]} == -f ]]; then
            skip_next=1
        fi
    done

    if [[ $COMP_CWORD -le $cmd_index ]]; then
        # The user has not specified a command yet
        local all_commands="$(tmux -q list-commands | cut -f 1 -d ' ')"
        COMPREPLY=( ${COMPREPLY[@]:-} $(compgen -W "${all_commands}" -- "${cur}") )
    else        
        case ${cmd} in
            attach-session|attach)
            case "$prev" in
                -t) _tmux_complete_session "${cur}" ;;
                *) options="-t -d" ;;
            esac ;;
            detach-client|detach)
            case "$prev" in
                -t) _tmux_complete_client "${cur}" ;;
                *) options="-t" ;;
            esac ;;
            lock-client|lockc)
            case "$prev" in
                -t) _tmux_complete_client "${cur}" ;;
                *) options="-t" ;;
            esac ;;
            lock-session|locks)
            case "$prev" in
                -t) _tmux_complete_session "${cur}" ;;
                *) options="-t -d" ;;
            esac ;;
            new-session|new)
            case "$prev" in
                -t) _tmux_complete_session "${cur}" ;;
                -[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}" ;;
                *) options="-t" ;;
            esac ;;
            rename-session|rename)
            case "$prev" in
                -t) _tmux_complete_session "${cur}" ;;
                *) options="-t" ;;
            esac ;;
            source-file|source) _tmux_filedir ;;
            has-session|has|kill-session)
            case "$prev" in
                -t) _tmux_complete_session "${cur}" ;;
                *) options="-t" ;;
            esac ;;
            suspend-client|suspendc)
            case "$prev" in
                -t) _tmux_complete_client "${cur}" ;;
                *) options="-t" ;;
            esac ;;
            switch-client|switchc)
            case "$prev" in
                -c) _tmux_complete_client "${cur}" ;;
                -t) _tmux_complete_session "${cur}" ;;
                *) options="-l -n -p -c -t" ;;
            esac ;;

            send-keys|send)
            case "$option" in
                -t) _tmux_complete_window "${cur}" ;;
                *) options="-t" ;;
            esac ;;
          esac # case ${cmd}
        fi # command specified
      fi # not -f 

      if [[ -n "${options}" ]]; then
          COMPREPLY=( ${COMPREPLY[@]:-} $(compgen -W "${options}" -- "${cur}") )
      fi

      return 0

}
complete -F _tmux tmux

# END tmux completion

স্ক্রিপ্ট উত্স


5
আমি এই স্ক্রিপ্টটি সংরক্ষণ করেছি এবং এটি আমার .Bashrc থেকে পেয়েছি। আমি tmux শুরু করেছি এবং "Ctrl + B,:" টিপুন এবং তারপরে "বিচ্ছিন্নতা" টাইপ করে একটি গুচ্ছ ট্যাব চাপলাম। কিছুই নেই। আমি এসি যোগ করেছি যাতে এটি "বিচ্ছিন্ন-সি" বলে এবং ট্যাবটি হিট করে এটি "বিচ্ছিন্ন ক্লায়েন্ট" এ সম্পন্ন হয়। এটি হ'ল স্ক্রিপ্টের আগে ঠিক একই আচরণ। কিছুই পরিবর্তন হয়েছে বলে মনে হচ্ছে না।
ববপল

6
@ বোপপল টিএমউক্সের মধ্যে ট্যাব সমাপ্তির জন্য জিজ্ঞাসা করছেন, বাশের মতো শেল থেকে নয়।
জেসন অ্যাকসেলসন

1
@ কেভ বাশ থেকে নয়, টিএমউক্সের মধ্যে ট্যাব সমাপ্তির জন্যও জিজ্ঞাসা করছে। এবং নোট করুন যে এই ব্যাশ কমান্ড সমাপ্তির পদ্ধতির জন্য কিছু সম্পর্কিত (পুরানো?) কোড github.com/aziz/dotfiles/blob/master/bash/completion/…গিথুবটিতে রয়েছে তবে তাদের আচরণ কীভাবে আলাদা তা আমার কাছে স্পষ্ট নয়। সম্ভবত লুইলিমও একটি টান অনুরোধে ডিফগুলি দিতে চাইবে?
নীলাম্যাকবি

এই স্বতঃপূরণ স্ক্রিপ্ট বাশে দুর্দান্ত কাজ করে !! ধন্যবাদ @ ললিমাও!
ট্রেভর সুলিভান

2
আমি উত্তরটি নীচে দিয়েছি কারণ ওপি টিএমউক্সের মধ্যে থেকে স্বয়ংক্রিয়ভাবে সম্পূর্ণ হওয়ার জন্য বলছে, বাশের জন্য নয়। এই উত্তরটি দ্বিতীয় তদন্তের জন্য পুরোপুরি যুক্তিসঙ্গত হতে পারে (ব্যাশের জন্য সমাপ্তি), তবে এটি সেই লোকদের বিভ্রান্ত করে যারা অনুসন্ধান ইঞ্জিনের মাধ্যমে এখানে এসে টিএমউক্সের মধ্যে থেকে কোনও সম্পূর্ণতা খুঁজে পাওয়ার চেষ্টা করে।
thiagowfx
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.