Festlegen von Terminal-Tab-Namen in OS X und Verwenden von vim

Ich ssh regelmäßig von einem OS X (El Capitan) Terminal aus in einen Linux-Cluster, manchmal mit mehreren Terminal-Tabs. Ich benutze bash und vim.

Ich möchte Folgendes tun:

  • Setzen Sie während ssh'd den Titel der Terminal-Registerkarte auf das aktuelle Arbeitsverzeichnis mitPROMPT_COMMAND='printf "\e]1;"`basename $PWD`"\a"'
  • Setzen Sie während der Verwendung von vim den Titel des Terminal-Tabs auf "vim — FILENAME"

Hier sind meine Probleme:

  • Wenn ich das tue let &titlestring = "vim — " . expand("%:t")und set titlein .vimrc, ändert es den Titel des Terminalfensters , nicht den Titel der Registerkarte. Wenn ich den Tab-Titel nicht separat setze (Parameter 1), spiegelt der Tab-Titel den Fenstertitel (Parameter 2), aber sobald ich den Tab-Titel setze, "entkoppelt" er sich vom Fenstertitel.
  • Wenn ich einen externen Befehl in .vimrc mit ausführe :!, erhalte ich einen "Press ENTER"-Dialog, der lästig ist.
  • :silent !Wenn ich in .vimrc verwende , erscheint meine Terminal-Eingabeaufforderung nach dem Beenden von vim am unteren Rand des Bildschirms. Ich möchte wirklich nicht damit herumspielen, die Eingabeaufforderungsposition zu speichern und sie jedes Mal zurückzusetzen, wenn ich vim verwenden möchte.
  • Wenn ich in meiner .bashrc folgende Funktion definiere :

    function vim
    {
        printf "\e]1;"`basename "$1"`"\a"
        vim "$1"
    }
    

    dann stürzt mein Terminal beim Aufrufen vimvon der Befehlszeile ab. Der Aufruf der Funktion vvimfunktioniert stattdessen, aber ich möchte nicht vvimewig tippen. Ich möchte aliasieren vim.

Ich scheine also festzustecken. Jeder Rat wäre sehr willkommen. Vielen Dank im Voraus!

Antworten (1)

Nun, ich habe mein eigenes Problem gelöst. Ich scheitere an Programmieren 101.

Indem ich vim als Funktion definiere und dann vim aufrufe, richte ich eine endlose rekursive Schleife ein. Kein Wunder, dass mein Terminal abgestürzt ist. Ich muss das "echte" vim nennen, die eigentliche ausführbare Datei. Das hat den Trick gemacht:

function vim
{
    printf "\e]1;"`basename "$1"`"\a"
    /usr/bin/vim "$1"
}
Dies ist ein netter Hack, aber es wäre wirklich nett, vimden printf-Befehl ausführen zu können. Wenn wir in Ihrer Version die Datei ändern, z. B. mit dem Plugin Strg+P, wird der Name der Registerkarte nicht aktualisiert.