Hauptseite

Titel von Screen-Fenstern automatisch von Vim, Bash und zsh setzen

3. Oktober 2009 von zimon

Wenn man unter Screen die Statusleiste nutzt, ist es oft mühsam jedes mal die Titel zu setzen. Auch wenn man diese fest in der ~/.screenrc definiert, kann man manchmal durcheinander kommen.

Unter Vim gibt es die Möglichkeit, den Namen der aktuellen Datei als Titel für das Screenfenster zu benutzen.
Dafür braucht man nur die folgenden Zeilen zur ~/.vimrc hinzufügen:

if expand('$TERM') == 'screen'
augroup vim_screen
  autocmd!
  autocmd VimEnter,BufWinEnter,WinEnter *
    \ exec "silent! !echo -ne '\\ek" . expand('%:t') . "\\e\\\\'"
augroup END
endif

[UPDATE]Auf dem 256bit Blog beschreibt Christian Brabandt, wie man den Screen-Titel von Vim aus ohne autocommands und mit sehr vielen Einstellungen setzen kann.[/UPDATE]

Ansonsten finde ich es sehr praktisch, wenn in der Statusleiste das aktuelle Verzeichnis steht. Da der komplette Pfad meist sehr lang ist, können mit einem regulären Ausdruck alle Verzeichnisse bis auf das letzte jeweils mit ihren Anfangsbuchstaben abgekürzt werden:

s/(\w).*?\//$1\//g

So wird /home/zimon/.vim/plugin zu /h/z/.v/plugin abgekürzt.

Wem das immer noch zu lang ist, der kann aus dem Namen des letzten Verzeichnisses auch noch die Vokale heraus nehmen (ähnlich wie es dillo in seinen Tabs macht):

s/(\w).*?\//$1\//g; my $end; $x=~s/\/(.)(?:[aeiou]|([^aeiou\/])(?{$end.=$^N}))*\s*$/\/$1$end/

Damit wird /home/zimon/.vim/plugin zu /h/z/.v/plgn

Um in der Bash den Screen-Titel automatisch zu setzen, kann man folgenden Code zu seiner ~/.bashrc hinzufügen. Hier wurde der erste reguläre Ausdruck genutzt (man kann ihn natürlich auch durch den anderen Ausdruck ersetzen, wenn man möchte):

function precmd {
    case "$TERM" in
        screen)
        wd=`perl -e '$x=shift; $x=~ s/(\w).*?\//$1\//g; print $x;' "$PWD"`
        echo -ne "\033k$wd\033\\"
        ;;
    esac
}
PROMPT_COMMAND=precmd

Für zsh User gibt es hier den Code für die ~/.zshrc. In diesem Beispiel wurde der zweite reguläre Ausdruck genutzt:

function precmd {
    if [[ "$TERM" == "screen" ]]; then
    local wd=`perl -e '$x=shift; $ x=~ s/(\w).*?\//$1\//g; my $end; $x=~s/\/(.)(?:[aeiou]|([^aeiou\/])(?{$end.=$^N}))*\s*$/\/$1$end/; print $x;' "$PWD"`
	PR_STITLE=$'%{\ek'$wd$'\e\\%}'
    fi
}

Vielen Dank an Ploppor für den zsh Code und sonstige zahlreiche Unterstützung in letzter Zeit.

Es tut mir leid, dass ich in letzter Zeit nichts geschrieben habe, aber meine Diplomarbeit lässt mir einfach keine Zeit.


Schlagworte: , , , , ,



7 Kommentare zu „Titel von Screen-Fenstern automatisch von Vim, Bash und zsh setzen“

  1. Someone sagt:

    Ich möchte einfach mal Danke sagen für die ganzen super Tipps für Vim. Hat mir sehr geholfen und auch Bekannte, die mit Vim arbeiten, denen ich dein Blog gezeigt habe, waren sehr begeistert.

    Viel Erfolg bei deiner Diplomarbeit!

  2. zimon sagt:

    Hallo,
    es freut mich immer sehr, wenn ich höre, dass anderen meine Tipps geholfen haben.

    In der nächsten Zeit werde ich wohl nicht dazu kommen, viele Einträge zu schreiben, aber ich schaue, dass ich von Zeit zu Zeit einen Artikel verfasse.

    Viele Grüße,
    zimon

  3. Christian sagt:

    Es geht in vim auch ohne autocommand. Ich mach das so:
    http://blog.256bit.org/archives/451-Vim-in-Screen.html

  4. zimon sagt:

    Hallo Christian,
    die Methode, die Du nutzt hat ja noch jede Menge Einstellungsmöglichkeiten :-D Ich hab mir das Flag “modified” aber so eingestellt, dass es nur angezeit wird, wenn die Datei auch verändert wurde (also mit %m direkt hinter dem Dateinamen, wie es auch sonst in Vim üblich ist).
    Vielen Dank für den Tipp.

    Viele Grüße
    zimon

  5. BHF sagt:

    auch von mir vielen dank für die super tips, die ich hier immer nachlesen kann.

    Bernd Helmut Frank

  6. Vincent sagt:

    Also für die zsh integriere ich diese Funktion in den Prompt.

    # set prompt
    if [[ "$TERM" == "screen" ]]; then
    export PS1=$’\ek’”%(1c.%1c.%~)”$’\e\\’”%(3c.%2c.%~)\$ ”
    else
    export PS1=”%(3c.%2c.%~)\$ ”
    fi

    praktisch, oder?

  7. zimon sagt:

    Hallo Vincent,

    das ist echt kurz und um ehrlich zu sein kann ich das jetzt nicht ohne Weiteres entschlüsseln ;) (Hab jetzt auch keine Zeit mir die Dokumentation anzusehen).

    Jedoch zeigt er mir dann nur das aktuelle Unterverzeichnis und nichts vom Pfad an. Ist Geschmackssache, wie man es lieber mag.

    Es gibt mit Sicherheit auch Möglichkeiten meine Version ohne den Einsatz von perl noch kürzer zu fassen.

    Viele Grüße
    zimon

Kommentieren

Kommentarlinks könnten nofollow frei sein.


Bloggeramt.de frisch gebloggt Blogverzeichnis - Blog Verzeichnis bloggerei.de