texto - Cómo cambiar automáticamente el nombre de tmux windows al directorio actual
tmux tutorial (9)
Me gustaría tener tmux para cambiar automáticamente el nombre de la ventana con el directorio de trabajo actual (cwd). Como es por defecto, nombra la pestaña / ventana como el nombre del proceso actual, como zsh o vim.
Cuando abro una nueva ventana en tmux, el nombre es reattach-to-use-namespace
y luego cambia a zsh
.
Estoy en OS X 10.10.2, uso zshell y tengo tmux 1.9a.
Para que quede claro, no quiero la ruta completa en el nombre de la ventana, solo el directorio actual, así que por ejemplo, quiero projectName
, no /Users/username/Development/projectName
.
Si quieres ver mi tmux.conf
actual, aquí está .
Agregar esta configuración a su archivo ~ / .tmux.conf debería funcionar:
set-option -g window-status-current-format ''#I:#{pane_current_path}#F''
set-option -g window-status-format ''#I:#{pane_current_path}#F''
set-option -g status-interval 1
Depende sin embargo de su versión Tmux. No pude hacerlo funcionar en 1.9a3 (en Cygwin), pero con Tmux 1.8 en Ubuntu (en Vagrant) funcionó bien.
Ampliando lo que escribió Josef, puede poner el nombre base del directorio en el estado usando un fragmento de shell:
# be sure to see note* below
set -g window-status-format ''#I:#(pwd="#{pane_current_path}"; echo ${pwd####*/})#F''
set -g window-status-current-format ''#I:#(pwd="#{pane_current_path}"; echo ${pwd####*/})#F''
# status bar updates every 15s by default**, change to 1s here
# (this step is optional - a lower latency might have negative battery/cpu usage impacts)
set -g status-interval 1
* Tenga en cuenta que lo que sería ${pwd##*/}
se escapará a ${pwd####*/}
ya que #
tiene un significado especial en la cadena de formato.
** Vea here para un ejemplo de configuración tmux por defecto.
Con tmux 2.3+ , el modificador de formato b:
muestra el "nombre base" (o "cola") de una ruta.
set-option -g status-interval 5
set-option -g automatic-rename on
set-option -g automatic-rename-format ''#{b:pane_current_path}''
La sección de FORMATS
de man tmux
describe otros prefijos para modificar el resultado #{}
, como d:
e incluso s/foo/bar/:
Con tmux anterior a 2.3 , se puede usar el comando de shell de basename
su lugar.
set-option -g status-interval 5
set-option -g automatic-rename on
set-option -g automatic-rename-format ''#(basename "#{pane_current_path}")''
Esto no responde estrictamente a su pregunta, no cambia automáticamente el nombre de una sesión tmux existente al directorio de trabajo actual.
Más bien, al crear una nueva sesión, nombra esa sesión después del directorio de trabajo actual.
Esto es lo que hice:
a
~ / .aliases
añadir
alias tm=''tmux new -s `basename $PWD`''
Abra una nueva ventana de terminal y escriba:
tm
Esto ahora crea una nueva sesión tmux que lleva el nombre del directorio de trabajo actual.
Nota: Esto se basa en el basename
que no existe en Windows.
Estoy usando zsh hook para eso
Agregue lo siguiente en ~/.zshrc
precmd () {
if [ -n "$TMUX" ]; then
tmux set-window-option -q window-status-format "#[fg=cyan bg=cyan] | #[fg=white, bg=cyan] #I | ${PWD##/*/} #[fg=cyan, bg=cyan] | "
tmux set-window-option -q window-status-current-format "#[fg=cyan, bg=cyan] | #[fg=white, bg=cyan] #I | ${PWD##/*/} #[fg=cyan, bg=cyan] | "
fi
}
Haga algo como esto en una sesión de tmux para el shell zsh:
setopt PROMPT_SUBST
export PS1=$''/ek$(basename $(pwd))/e//> ''
Si alguien usa bash shell:
export PS1="/033k/$(basename /$(pwd))/033//> "
Puede agregar estos comandos en el archivo de inicialización del shell con la condición de que la variable env $TERM
se establezca en el valor "screen"
Uso lo siguiente en ~ / .tmux.conf para lograr esto (trabajando en OSX, zsh, tmux-2.3):
set -g automatic-rename-format ''#{pane_current_path}''
set -g status-interval 5
Puede establecer el intervalo de estado en 1 para que responda más rápido a los directorios cambiantes.
De acuerdo con el registro de cambios ( https://raw.githubusercontent.com/tmux/tmux/master/CHANGES ), esto debería funcionar en tmux 1.9 en adelante.
Al usar ssh en una máquina CentOS con tmux 2.3, el nombre de la ventana no cambia hasta que presiono regresar en el nuevo panel, sin estar seguro de por qué sucede eso.
Mostrar los componentes N superiores
Mostrar solo el nombre base genera demasiada ambigüedad, pero los caminos llenos son demasiado desordenados, así que me conformé con:
the/last/path
en lugar de:
/a/very/long/the/last/path
o solo:
path
.tmux.conf
:
set-window-option -g window-status-current-format ''#[fg=white,bold]** #{window_index} #[fg=green]#{pane_current_command} #[fg=blue]#(echo "#{pane_current_path}" | rev | cut -d''/'' -f-3 | rev) #[fg=white]**|''
set-window-option -g window-status-format ''#[fg=white,bold]#{window_index} #[fg=green]#{pane_current_command} #[fg=blue]#(echo "#{pane_current_path}" | rev | cut -d''/'' -f-3 | rev) #[fg=white]|''
Truco tomado de: Unix quitar parte de la ruta
Si eso todavía no resuelve la ambigüedad, voy por:
bind-key -r w choose-window -F ''#{window_index} | #{pane_current_command} | #{host} | #{pane_current_path}''
Probado en Tmux 2.1, Ubuntu 16.04.