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.