É possível abrir um new-window
com seu diretório de trabalho definido como aquele em que estou atualmente. Estou usando o zsh , se isso importa.
É possível abrir um new-window
com seu diretório de trabalho definido como aquele em que estou atualmente. Estou usando o zsh , se isso importa.
Respostas:
A partir de tmux 1,9 a default-path
opção foi removida, então você precisa usar a -c
opção com new-window
e split-window
(por exemplo, religação a c
, "
e %
ligações para incluir
-c '#{pane_current_path}'
). Veja algumas das outras respostas a esta pergunta para obter detalhes.
Um recurso relevante chegou ao tronco SVN do tmux no início de fevereiro de 2012. Nas compilações do tmux que incluem esse código, as ligações de teclas do tmux que invocam new-window
criarão uma nova janela com o mesmo diretório de trabalho atual que os processos ativos do painel atual (desde que a default-path
sessão opção está vazia; por padrão). O mesmo vale para o painel criado pelo split-window
comando quando ele é chamado por meio de uma ligação.
Ele usa 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, eu costumo usar
tmux neww
em um shell que já tenha o diretório de trabalho atual desejado.
No entanto, se eu antecipar a necessidade de criar muitas janelas com o mesmo diretório de trabalho atual (ou desejar poder iniciá-las com a c
ligação de teclas <prefix> usual ), defino a default-path
opção de sessão por meio de
tmux set-option default-path "$PWD"
em um shell que já tenha o diretório de trabalho atual desejado (embora você possa obviamente fazê-lo em 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 invocações da linha de comando de tmux neww
.
O FAQ do tmux possui uma entrada intitulada “Como posso abrir uma nova janela no mesmo diretório da janela atual?” Que descreve outra abordagem; é um pouco complicado, no entanto.
/proc/PID/cwd
no Linux)). Existe uma solução parcial possível em uma entrada da FAQ do tmux (ele faz com que o shell registre seu cwd quando imprime um prompt, depois vincula uma chave que inicia um novo shell no diretório gravado).
default-path
opção da sessão (se isso estiver definido). O FAQ do tmux possui uma entrada que descreve uma maneira de vincular uma chave que inicia uma nova janela com o cwd do shell em execução na janela atual (“Como posso abrir uma nova janela no mesmo diretório da janela atual?”) , mas o método é bastante complicado. Provavelmente o mesmo poderia ser feito para split-window
e new-session
(em vez de neww
).
A página de manual Tmux atual (1.9a) lista um -c start-directory
parâmetro opcional 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 ao
Current path if available
.
Ao combiná-los, podemos abrir uma nova janela com o diretório de trabalho atual usando
new-window -c "#{pane_current_path}"
A cotação é necessária caso o caminho atual contenha espaços.
Se você deseja dividir o painel atual verticalmente, use
split-window -c "#{pane_current_path}"
ou, para uma divisão horizontal
split-window -h -c "#{pane_current_path}"
Para fazer com que as ligaçõ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
. A "
citação ao redor é dizer ao Tmux que ele não deve iniciar uma string, mas vincular 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}"
prefix
- :
e digitesource ~/.tmux.conf
tmux source-file .tmux.conf
.
Sim, use new-window -c "#{pane_current_path}"
. Você pode adicionar o seguinte ao seu ~/.tmux.conf
para torná-lo persistente (assumindo as combinações de teclas 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 default-path
configuração do caminho foi removida do código upstream e o autor tmux recomendado nessa mensagem de confirmação usando um -c "#{pane_current_path}"
ou -c "$PWD
nos comandos new-window
e split-window
.
Eu também respondi nesta pergunta duplicada .
Nas versões recentes do tmux (v1.8, mas talvez também na v1.7):
tmux new-window -c "$PWD"
tmux split-window -v -c "$PWD"
$PWD
parece não funcionar para mim no tmux 1.9a. Eu tive que usar pane_current_path
como sugerido acima.
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 venho usando há mais de um ano que funciona tanto para nova janela quanto para 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 linhas comentadas aqui para uma versão que funciona para tmuxes mais antigos que não têm o comando show-environment.
O tmux fez isso na versão 1.8, mas na 1.9 esse recurso foi removido a favor do uso do -c
sinalizador.
Isso pode ser resolvido, mas é obrigatório, new-window
mas caso você queira executar outra coisa, fica muito prolixo: em vez de digitar, neww man tmux
você precisará digitar o neww -c "#{pane_current_path}" man tmux
que provavelmente não deseja fazer.
Existe um mod do tmux (eu sou o autor) para adicionar uma linguagem de script adequada ao tmux para permitir o uso de aliases, vinculando vários comandos no 'mode', variáveis, loops, etc. : novas janelas e painéis são abertos no diretório atual.
Pode ser construído a partir de fontes aqui: http://ershov.github.io/tmux/
<prefix>c
para ler o diretório de trabalho da instância do shell subjacente (se houver) e definir odefault-path
antes da execuçãonew-window
. Ou isso é pedir demais de tmux :)