Tmux esquece o diretório onde a sessão foi criada

8

Quando eu crio várias sessões no tmux, o diretório atual para cada nova janela nas sessões subseqüentes é definido como o diretório atual para a primeira.

Por exemplo:

-> cd /home/one && tmux new-session -n one\; new-window -n two
   # /home/one is the current directory for each window

-> cd /home/two && tmux new-session -n three\; new-window -n four #\; etc.
   # "/home/two" is the current directory for the window "three"
   # but for the window "four" and other created windows it is "/home/one"

Como posso forçar o tmux a definir o diretório atual para cada nova janela em sessões subsequentes como o diretório onde a sessão foi criada?

tmux 1.6

zsh 4.3

    
por Shamaoke 24.10.2012 / 03:04

3 respostas

21

A partir do tmux 1.9, a opção default-path foi removida .

Você pode usar o seguinte para abrir no diretório em que a sessão foi aberta (o 'cliente' no nome indicaria para mim que é o runnin atual do tmux em seu shell, mas parece mudar os caminhos ao alternar entre sessões no mesmo cliente):

bind-key c  new-window -c "#{client_cwd}"

Caso contrário, para copiar o caminho do painel atual:

bind-key c  new-window -c "#{pane_current_path}"

Há também pane_start_path que pode atrair alguns fluxos de trabalho.

bind-key c  new-window -c "#{pane_start_path}"

Para os comandos da janela dividida.

bind-key % split-window -h -c "#{pane_current_path}"
bind-key '"' split-window -c "#{pane_current_path}"
    
por 24.02.2014 / 07:32
3

Eu percebo que essa pergunta é bem antiga, mas surgiu como uma das únicas perguntas no StackExchange quando eu estava procurando a resposta, então aqui está como eu resolvi isso para o tmux 1.8.

O comando new-window recebe o -c flag que permitirá que você especifique o diretório atual da nova janela. Por padrão, é uma string vazia, que usará o diretório de trabalho de painéis atual como o diretório da nova janela. Passar em - como o valor para o sinal -c definirá o diretório da nova janela para o que a sessão foi aberta.

Aqui está um trecho dos documentos:

-c specifies the working directory in which the new window is created.  It may 
have an absolute path or one of the following values (or a subdirectory):

       Empty string    Current pane's directory
       ~               User's home directory
       -               Where session was started
       .               Where server was started

Se você quiser alterar o comportamento padrão da associação de teclas <PREFIX> c para refletir isso, veja o que fiz no meu ~/.tmux.conf :

bind-key c   new-window -c -
    
por 27.01.2014 / 18:00
0

existem algumas respostas aqui: link

em resumo:

da FAQ do tmux, uma maneira obtusa (mas muito geral e razoavelmente independente de shell):

  • How can I open a new window in the same directory as the current window?

One option is to just run "TMUX= tmux" in the window. However, this only works if no command is running, so that you can input the command.

A workaround is to let tmux know about the current path through an environment variable. To do so, use the following command:

[ -n "$TMUX" ] && tmux setenv TMUXPWD_$(tmux display -p "#I") $PWD

Which sets TMUXPWD_i (where i is the number of the current window) to the path of the current directory. This command can be added to PS1, for example:

PS1='$([ -n "$TMUX" ] && tmux setenv TMUXPWD_$(tmux display -p "#I") $PWD)\h$ '

When a new window is created, the shell should be asked to change directory. You can define a new binding (for example, if using GNU bash):

bind-key C-c run-shell 'tmux neww "cd $(tmux display -p "\$TMUXPWD_#I"); exec bash"'

This solution will work even if a command is currently running in the terminal, but it will not work from a window that has just been swapped with another because TMUXPWD_i will not be updated after a swap. However, once a new prompt is displayed, TMUXPWD_i is updated properly.

simplesmente substitua as chamadas para o shell conforme apropriado para o seu.

também, aparentemente versões mais recentes do tmux têm isso resolvido com um comando

tmux new-window

versões antigas são reivindicadas a funcionar assim:

chamando

tmux neww

do seu shell irá abrir o tmux nesse diretório.

se você gostaria de poder abrir novas janelas ou painéis a partir do diretório de trabalho atual no tmux, você deve:

tmux set-option default-path "$PWD"

    
por 24.10.2012 / 07:42

Tags