Como criar uma nova janela no diretório atual no tmux?

181

É possível abrir um new-window com seu diretório de trabalho configurado para o que estou usando atualmente. Estou usando zsh , se for importante.

    
por Shrikant Sharat 26.04.2011 / 12:25

6 respostas

129

A partir de tmux 1.9, a opção default-path foi removida, portanto, você precisa usar a opção -c com new-window e split-window (por exemplo, religando a c , " e % de ligações para incluir -c '#{pane_current_path}' ). Veja algumas das outras respostas a esta pergunta para detalhes.

Um recurso relevante foi lançado no tronco SVN tmux no início de fevereiro de 2012. Em compilações tmux que incluem esse código, tmux invoke new-window criará uma nova janela com o mesmo diretório de trabalho atual que os processos ativos do painel atual (contanto que a opção default-path session esteja vazia; ela é por padrão). O mesmo é verdadeiro para o painel criado pelo comando split-window quando ele é chamado por meio de uma ligação.

Isso usa um código especial específico da plataforma, portanto, apenas alguns sistemas operacionais são suportados no momento: Darwin (OS X), FreeBSD, Linux, OpenBSD e Solaris.

Isso deve estar disponível na próxima versão do tmux (1.7?).

Com o tmux 1.4, normalmente uso apenas

tmux neww

em um shell que já possui o diretório de trabalho atual desejado.

Se, no entanto, eu prevejo precisar criar muitas janelas com o mesmo diretório de trabalho atual (ou eu quero ser capaz de iniciá-las com a usual ligação de chave < prefix & #; c ), então defino o default-path opção de sessão via

tmux set-option default-path "$PWD"

em um shell que já possui o diretório de trabalho atual desejado (embora você possa obviamente fazê-lo de qualquer diretório e apenas especificar o valor).

Se default-path for definido como um valor não vazio, seu valor será usado em vez de "herdar" o diretório de trabalho atual das chamadas da linha de comandos de tmux neww .

A tmux FAQ tem uma entrada intitulada "Como pode Eu abro uma nova janela no mesmo diretório da janela atual? ”, Que descreve outra abordagem; é um pouco confuso embora.

    
por 27.04.2011 / 04:22
230

A página man atual do Tmux (1.9a) lista um parâmetro opcional -c start-directory para alguns comandos, incluindo new-window e split-window . Ele também contém a variável de formato pane_current_path , que se refere à Current path if available .

Combinando-os, podemos abrir uma nova janela com o diretório de trabalho atual usando o% new-window -c "#{pane_current_path}"
A cotação é necessária caso o caminho atual contenha espaços.

Se você quiser dividir o painel atual verticalmente, use split-window -c "#{pane_current_path}"
ou, para uma divisão horizontal em split-window -h -c "#{pane_current_path}"

Para que as combinações de teclas abram novas divisões e janelas com o diretório de trabalho atual por padrão, adicione o seguinte ao seu .tmux.conf . O " com aspas circunvizinhas é dizer ao Tmux que ele não deve iniciar uma string, mas sim ligar a chave ".

bind '"' split-window -c "#{pane_current_path}"
bind % split-window -h -c "#{pane_current_path}"
bind c new-window -c "#{pane_current_path}"
    
por 06.03.2014 / 10:34
32

Sim, use new-window -c "#{pane_current_path}" . Você pode adicionar o seguinte ao seu ~/.tmux.conf para torná-lo persistente (assumindo atalhos de teclado padrão):

bind c new-window -c "#{pane_current_path}"
bind '"' split-window -c "#{pane_current_path}"
bind % split-window -h -c "#{pane_current_path}"

A configuração default-path do caminho era removida do código upstream e do autor do tmux recomendado nessa mensagem de confirmação usando -c "#{pane_current_path}" ou -c "$PWD nos comandos new-window e split-window .

Também respondi nesta pergunta duplicada .

    
por 15.01.2014 / 15:29
9

Com versões recentes do tmux (v1.8, mas talvez também na v1.7):

tmux new-window -c "$PWD"
    
por 04.07.2013 / 23:55
3

As outras respostas não funcionam para mim quando tento colocá-las como ligações (especificamente tmux split-window -c ). Mas eu criei minha própria solução que uso há mais de um ano para novas janelas e divisões:

~/.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, pelo menos, com $ (tmux -V) 1.8. Veja as linhas comentadas aqui para uma versão que funciona para os tmuxes mais antigos que não têm o comando show-environment.

    
por 08.12.2013 / 22:12
0

O tmux fez isso na versão 1.8, mas na versão 1.9 esse recurso foi removido em favor do uso de -c flag.

Isso pode ser resolvido, mas revinculando new-window , mas caso você queira executar outra coisa, ele se torna muito prolixo: em vez de digitar neww man tmux , você terá que digitar neww -c "#{pane_current_path}" man tmux , o que provavelmente não quer fazer.

Há um mod de tmux (eu sou o autor) para adicionar uma linguagem de script apropriada ao tmux para permitir o uso de aliases, ligar múltiplos comandos em 'mode', variáveis, loops, etc ... E também, ele traz de volta o comportamento: novas janelas e painéis são abertos no diretório atual.

Ele pode ser criado a partir de fontes aqui: link

    
por 29.04.2016 / 16:14