Es posible abrir un archivo new-window
con su directorio de trabajo configurado en el que estoy actualmente. Estoy usando zsh , si es importante.
Es posible abrir un archivo new-window
con su directorio de trabajo configurado en el que estoy actualmente. Estoy usando zsh , si es importante.
Respuestas:
A partir de tmux 1.9 el default-path
fue retirado opción, por lo que es necesario utilizar la -c
opción con new-window
y split-window
(por ejemplo, mediante la revinculación c
, "
y %
fijaciones para incluir
-c '#{pane_current_path}'
). Vea algunas de las otras respuestas a esta pregunta para más detalles.
Una característica relevante aterrizó en el tronco de SVN de tmux a principios de febrero de 2012. En las compilaciones de tmux que incluyen este código, los enlaces de teclas de tmux que invocan new-window
crearán una nueva ventana con el mismo directorio de trabajo actual que los procesos activos del panel actual (siempre que la default-path
sesión la opción está vacía; está por defecto). Lo mismo es cierto para el panel creado por el split-window
comando cuando se invoca a través de un enlace.
Esto utiliza un código especial específico de la plataforma, por lo que solo ciertos sistemas operativos son compatibles en este momento: Darwin (OS X), FreeBSD, Linux, OpenBSD y Solaris.
Esto debería estar disponible en la próxima versión de tmux (1.7?).
Con tmux 1.4, generalmente solo uso
tmux neww
en un shell que ya tiene el directorio de trabajo actual deseado.
Sin embargo, si preveo la necesidad de crear muchas ventanas con el mismo directorio de trabajo actual (o si quiero poder iniciarlas con el c
enlace de teclas <prefix> habitual ), entonces configuro la default-path
opción de sesión a través de
tmux set-option default-path "$PWD"
en un shell que ya tiene el directorio de trabajo actual deseado (aunque obviamente podría hacerlo desde cualquier directorio y simplemente especificar el valor).
Si default-path
se establece en un valor no vacío, su valor se utilizará en lugar de "heredar" el directorio de trabajo actual de las invocaciones de línea de comandos de tmux neww
.
Las preguntas frecuentes de tmux tienen una entrada titulada “¿Cómo puedo abrir una nueva ventana en el mismo directorio que la ventana actual?” Que describe otro enfoque; Sin embargo, es un poco complicado.
/proc/PID/cwd
en Linux)). Hay una posible solución parcial en una entrada de las preguntas frecuentes de tmux (tiene el shell registra su cwd cuando imprime una solicitud, luego vincula una clave que inicia un nuevo shell en el directorio grabado).
default-path
opción de sesión (si está configurada). Las preguntas frecuentes de tmux tienen una entrada que describe una forma de vincular una clave que inicia una nueva ventana con el cwd del shell ejecutándose en la ventana actual ("¿Cómo puedo abrir una nueva ventana en el mismo directorio que la ventana actual?") , pero el método es bastante complicado. Probablemente se podría hacer lo mismo por split-window
y new-session
(en lugar de neww
).
La página de manual actual de Tmux (1.9a) enumera un -c start-directory
parámetro opcional para algunos comandos, incluidos new-window
y split-window
. También contiene la variable de formato pane_current_path
, que se refiere a
Current path if available
.
Combinando estos, podemos abrir una nueva ventana con el directorio de trabajo actual usando
new-window -c "#{pane_current_path}"
La cita es necesaria en caso de que la ruta actual contenga espacios.
Si desea dividir el panel actual verticalmente, use
split-window -c "#{pane_current_path}"
o, para una división horizontal
split-window -h -c "#{pane_current_path}"
Para que las combinaciones de teclas abran nuevas divisiones y ventanas con el directorio de trabajo actual de forma predeterminada, agregue lo siguiente a su .tmux.conf
. La "
cita entre comillas es decirle a Tmux que no debe comenzar una cadena, sino vincular la "clave.
bind '"' split-window -c "#{pane_current_path}"
bind % split-window -h -c "#{pane_current_path}"
bind c new-window -c "#{pane_current_path}"
prefix
- :
, luego escribasource ~/.tmux.conf
tmux source-file .tmux.conf
.
Si, uso new-window -c "#{pane_current_path}"
. Puede agregar lo siguiente a su ~/.tmux.conf
para que sea persistente (asumiendo las combinaciones de teclas predeterminadas):
bind c new-window -c "#{pane_current_path}"
bind '"' split-window -c "#{pane_current_path}"
bind % split-window -h -c "#{pane_current_path}"
los default-path
configuración de la ruta se eliminó del código ascendente y el autor de tmux lo recomendó en ese mensaje de confirmación utilizando -c "#{pane_current_path}"
o -c "$PWD
en los comandos new-window
y split-window
.
También respondí en esto pregunta duplicada .
Con versiones recientes de tmux (v1.8, pero quizás también en v1.7):
tmux new-window -c "$PWD"
tmux split-window -v -c "$PWD"
$PWD
no parece funcionar para mí en tmux 1.9a. Tuve que usar pane_current_path
como se sugirió anteriormente.
Las otras respuestas no funcionan para mí cuando trato de ponerlas como enlaces (específicamente tmux split-window -c
). Pero he creado mi propia solución que he estado usando durante más de un año que funciona tanto para ventanas nuevas como para divisiones:
~/.bashrc
:
PS1="$PS1"'$([ -n "$TMUX" ] && tmux setenv TMUXPWD_$(tmux display -p "#D" | tr -d %) "$PWD")'
~/.tmux.conf
:
unbind-key c
bind-key c run-shell 'tmux new-window "cd \"$(tmux show-environment $(echo "TMUXPWD_#D" | tr -d %) | sed -e "s/^.*=//")\"; exec $SHELL"'
bind-key C new-window
bind-key - run-shell 'tmux split-window -v "cd \"$(tmux show-environment $(echo "TMUXPWD_#D" | tr -d %) | sed -e "s/^.*=//")\"; exec $SHELL"'
bind-key | run-shell 'tmux split-window -h "cd \"$(tmux show-environment $(echo "TMUXPWD_#D" | tr -d %) | sed -e "s/^.*=//")\"; exec $SHELL"
Funciona, al menos, con $ (tmux -V) 1.8. Vea las líneas no comentadas aquí para obtener una versión que funcione para tmuxes anteriores que no tienen el comando show-environment.
tmux hizo eso en la versión 1.8 pero en 1.9 esta característica fue eliminada a favor de usar -c
flag.
Esto se puede resolver pero volver a vincular, new-window
pero en caso de que desee ejecutar otra cosa, se vuelve demasiado prolijo: en lugar de escribir neww man tmux
, tendrá que escribirneww -c "#{pane_current_path}" man tmux
lo que probablemente no quiera hacer.
Hay un mod de tmux (soy el autor) para agregar un lenguaje de scripting adecuado a tmux para permitir el uso de alias, vincular múltiples comandos en 'modo', variables, bucles, etc. Y también, trae de vuelta ese comportamiento : se abren ventanas y paneles nuevos en el directorio actual.
Se puede construir a partir de fuentes aquí: http://ershov.github.io/tmux/
<prefix>c
para leer el directorio de trabajo de la instancia de shell subyacente (si existe) y configurar eldefault-path
antes de ejecutarnew-window
? ¿O es demasiado pedirle a tmux :)