2016-09-02 22 views
-1

Ubuntuにコマンドscreen -rを入力して、以前の画面をより簡単に復元できるようにしたいと思います。私はscreen -xコマンドを知っていますが、複数の画面が存在する状況ではまだscreen -rが必要です。Ubuntuの画面全体をタブでタブする方法は?

このタブ補完機能は、すべてのUbuntuマシンには存在しません。時々、同じマシンでは、タブ補完はbashシェルでは機能しますが、zshシェルでは失敗します。

誰がどのようにUbuntuのではbashとzshのために、このタブ補完機能を設定するに教えてもらえますか?

===============================いくつかの事実============= ===================

は、ここで私はこの質問を後に発見されたいくつかの有用な事実があります。これらの事実は、ある程度回避策として役立つと思います。

私はタブ補完をサポートしていない場合でも、私はまた私の画面を回復するために、スクリーン名の一部を使用することができる、ということを見つけます。他の画面名はzshのためとして1

で始まっていない場合たとえば、画面12354.pts-0.slave9を与え、私はそれがscreen -r 1完全なタブができない場合、それはおそらくタブがscreen -r 0を完了することができ、単にscreen -r 1を入力して、それを回復することができます。ここで0は部分文字列pts-0に由来します。つまり、名前の他の部分をタブ補完に使用できます。

答えて

-1

それは完全なルールは、bashrcにbashの補完から画面用https://www.gnu.org/software/bash/manual/html_node/Programmable-Completion.htmlhttps://www.gnu.org/software/bash/manual/html_node/Programmable-Completion-Builtins.html
例はbash完全なスクリプトを参照するために追加で可能です:

# bash completion for screen        -*- shell-script -*- 

_screen_sessions() 
{ 
    local sessions=($(command screen -ls | sed -ne \ 
     's|^\t\{1,\}\([0-9]\{1,\}\.[^\t]\{1,\}\).*'"$1"'.*$|\1|p')) 
    if [[ $cur == +([0-9])?(.*) ]]; then 
     # Complete sessions including pid prefixes 
     COMPREPLY=($(compgen -W '${sessions[@]}' -- "$cur")) 
    else 
     # Create unique completions, dropping pids where possible 
     local -A res 
     local i tmp 
     for i in ${sessions[@]}; do 
      res[${i/#+([0-9])./}]+=" $i" 
     done 
     for i in ${!res[@]}; do 
      [[ ${res[$i]} == \ *\ * ]] && tmp+=" ${res[$i]}" || tmp+=" $i" 
     done 
     COMPREPLY=($(compgen -W '$tmp' -- "$cur")) 
    fi 
} && 
_screen() 
{ 
    local cur prev words cword 
    _init_completion || return 

    if ((cword > 2)); then 
     case ${words[cword-2]} in 
      -[dD]) 
       _screen_sessions 
       return 0 
       ;; 
     esac 
    fi 

    local i 
    for ((i=1; i <= cword; i++)); do 
     case ${words[i]} in 
      -r|-R|-d|-D|-x|-s|-c|-T|-e|-h|-p|-S|-t) 
       ((i++)) 
       continue 
       ;; 
      -*) 
       continue 
       ;; 
     esac 

     _command_offset $i 
     return 
    done 

    case $prev in 
     -[rR]) 
      # list detached 
      _screen_sessions 'Detached' 
      return 0 
      ;; 
     -[dD]) 
      # list attached 
      _screen_sessions 'Attached' 
      return 0 
      ;; 
     -x) 
      # list both 
      _screen_sessions 
      return 0 
      ;; 
     -s) 
      _shells 
      return 0 
      ;; 
     -c) 
      _filedir 
      return 0 
      ;; 
     -T) 
      _terms 
      return 0 
      ;; 
     -e|-h|-p|-S|-t) 
      return 0 
      ;; 
    esac 

    if [[ "$cur" == -* ]]; then 
     COMPREPLY=($(compgen -W '-a -A -c -d -D -e -f -fn -fa -h -i -ln -list 
      -L -m -O -p -q -r -R -s -S -t -T -U -v -wipe -x -X --help 
      --version' -- "$cur")) 
    fi 
} && 
complete -F _screen screen 

# ex: ts=4 sw=4 et filetype=sh 
+0

あなたはより具体的なルールを説明し、私は書くことができます1 – njj

+0

は私が画面 '12354.pts-0.slave9'があると、私は '1 +' Tab' -r '画面を入力したい、と私は'画面-r 12354.pts-0.slave9' – pfllo

+0

エコーを取得します"complete -W" 12354.pts-0.slave9 'screen -r ">>〜/ .bashrc – njj

関連する問題