O Tmux esquece o diretório em que a sessão foi criada


8

Quando 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 forçar o tmux a definir o diretório atual para cada nova janela nas sessões subseqüentes como o diretório em que a sessão foi criada?

tmux 1.6

zsh 4.3

Respostas:


21

A partir do tmux 1.9, a opção de caminho padrão 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 tmux atual em execução no seu shell, mas parece alternar os caminhos ao alternar entre sessões no diretório 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}"

Também há 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}"

11
Essa é a resposta correta. Especificamente a segunda opção no meu caso.
Mike Rapadas

como um aparte, não se esqueça de fechar todos os terminais tmux em funcionamento atuais, incluindo plano de fundo antes de procurar seu arquivo de configuração, caso contrário, o tmux não carregará novas configurações.
randomness2077

@lightmanhk Você deve ser capaz de simplesmente: source ~ / .tmux.conf
David C. Bishop

11
Alguma maneira de generalizar isso para divisões de painel? split-window -h "#{pane_current_path}"não vai funcionar ...
Bach

11
@Bach Tente com -c. split-window -h -c "#{pane_current_path}"
David C. Bishop

3

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

O new-windowcomando aceita um -csinalizador que permite especificar o diretório atual da nova janela. Por padrão, é uma sequência vazia, que utilizará o diretório de trabalho dos painéis atuais como o diretório da nova janela. Passar a -como o valor do -csinalizador 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ê deseja alterar o comportamento padrão da <PREFIX> ccombinação de teclas para refletir isso, aqui está o que eu fiz no meu ~/.tmux.conf:

bind-key c   new-window -c -

0

existem algumas respostas aqui: /unix/12032/create-new-window-with-current-directory-in-tmux

Em suma:

no FAQ do tmux, uma maneira obtusa (mas muito geral e bastante independente do shell):

  • Como posso abrir uma nova janela no mesmo diretório da janela atual?

Uma opção é apenas executar "TMUX = tmux" na janela. No entanto, isso funciona apenas se nenhum comando estiver em execução, para que você possa inserir o comando.

Uma solução alternativa é informar ao tmux sobre o caminho atual através de uma variável de ambiente. Para fazer isso, use o seguinte comando:

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

O que define o TMUXPWD_i (onde i é o número da janela atual) como o caminho do diretório atual. Este comando pode ser adicionado ao PS1, por exemplo:

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

Quando uma nova janela é criada, o shell deve ser solicitado a alterar o diretório. Você pode definir uma nova ligação (por exemplo, se estiver usando o GNU bash):

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

Esta solução funcionará mesmo se um comando estiver em execução no terminal, mas não funcionará em uma janela que acabou de ser trocada por outra porque o TMUXPWD_i não será atualizado após uma troca. No entanto, quando um novo prompt é exibido, o TMUXPWD_i é atualizado corretamente.

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

Além disso, versões aparentemente mais recentes do tmux têm isso endereçado com um comando

nova janela do tmux

Diz-se que versões mais antigas funcionam da seguinte maneira:

chamando

tmux neww

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

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

caminho padrão da opção de configuração do tmux "$ PWD"


Obrigado por tentar ajudar, morsa . Eu vi essa pergunta no unix.stackexchange e li FAQ. No entanto, essas não são as respostas para minha pergunta.
Shamaoke 24/10/12

11
Olhe, quando você cria uma nova sessão, o diretório atual para cada nova janela ou painel que você abrir nessa sessão será o diretório em que você iniciará a sessão . Isso é verdade se eu criar uma única sessão. No entanto, quando abro uma nova janela do terminal e inicio outra sessão, o diretório de trabalho atual para cada nova janela será o diretório em que inicio a primeira sessão, mas não a atual. Aparentemente, isso é um bug no tmux 1.6, pois quando o desclassifiquei para a versão 1.3, o bug não apareceu.
Shamaoke 24/10/12
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.