
Acabei de instalar o tmux no Ubuntu 10.04 e tentei remapear a chave do prefixo C-a
criando o arquivo ~/.tmux.conf
com estas linhas:
set-option -g prefix C-a
unbind-key C-b
Ao iniciar o tmux, tanto regularmente quanto com -f ~/.tmux.conf
, o prefixo é efetivamente o mesmo padrãoC-b
Não há erros ou avisos de qualquer tipo.
Alguma ideia do que há de errado com o carregamento do conf?
Responder1
O arquivo ~/.tmux.conf é carregado quando o servidor tmux é iniciado pela primeira vez. Portanto, se houver sessões tmux existentes, iniciar uma nova sessão tmux
não resulta no recarregamento do arquivo .tmux.conf. Tente reiniciar o servidor tmux: Use o comando tmux list-sessions
para ver se há sessões existentes. Saia deles (por exemplo tmux attach
, mate todas as janelas e saia). Depois que todas as sessões terminarem, tente tmux
novamente. Desta vez, a religação deve funcionar.
Responder2
Para recarregar seu ~/.tmux.conf sem encerrar sua sessão, você pode simplesmente fazer:
<prefix> :source-file /absolute/path/to/your/.tmux.conf
onde <prefix>
está <C-b>
por padrão.
Responder3
execute dentro da sua sessão tmux:
tmux source-file /absolute/path/to/your/.tmux.conf
Responder4
Há 12 anos
Funciona para mim™. Tente executar
strace -s9999 -f -o tmux.strace tmux -c true
e poste a saída dogrep -C5 'tmux\.conf' tmux.strace
. - Gilles 'SO- pare de ser mau' 14 de setembro de 2010 às 20:24
Uma master class em eufemismo
Sem alarde, eles deixaram cair uma única frase em um comentário que deveria ter sido, não apenasuma respostamas,a resposta. Não somentea respostapara esta questão, masa resposta de referênciapara uma classe inteira de perguntas.
Dividindo
O que strace -s9999 -f -o tmux.strace tmux -c true
significa?
É como se fossem 2 comandos em 1. O comando principal é, tmux
mas recebe um "prefixo"/"wrapper" chamado strace
. Isso é muito semelhante à execução time df
para medir quanto tempo leva para executar o df
comando.
strace
-s9999
-f
-o tmux.strace
$ man strace | grep -A1 ^NAME
NAME
strace - trace system calls and signals
$ man strace | grep -EA10 '^ *DESCRIPTION($| )'
DESCRIPTION
In the simplest case strace runs the specified command until it exits. It
intercepts and records the system calls which are called by a process and
the signals which are received by a process. The name of each system call,
its arguments and its return value are printed on standard error or to the
file specified with the -o option.
strace is a useful diagnostic, instructional, and debugging tool. System
administrators, diagnosticians and trouble-shooters will find it invaluable
for solving problems with programs for which the source is not readily
available since they do not need to be recompiled in order to trace them.
$ man strace | grep -EA4 '^ *-s($| )'
-s strsize
--string-limit=strsize
Specify the maximum string size to print (the default is 32).
Note that filenames are not considered strings and are always
printed in full.
$ man strace | grep -EA6 '^ *-f($| )'
-f
--follow-forks
Trace child processes as they are created by currently traced
processes as a result of the fork(2), vfork(2) and clone(2) sys‐
tem calls. Note that -p PID -f will attach all threads of
process PID if it is multi-threaded, not only thread with
thread_id = PID.
$ man strace | grep -EA8 '^ *-o($| )'
-o filename
--output=filename
Write the trace output to the file filename rather than to
stderr. filename.pid form is used if -ff option is supplied.
If the argument begins with '|' or '!', the rest of the argument
is treated as a command and all output is piped to it. This is
convenient for piping the debugging output to a program without
affecting the redirections of executed programs. The latter is
not compatible with -ff option currently.
tmux
-c true
$ man tmux | grep -EA4 '^ *-c($| [^ ]*$)'
-c shell-command
Execute shell-command using the default shell. If necessary,
the tmux server will be started to retrieve the default-shell
option. This option is for compatibility with sh(1) when tmux
is used as a login shell.
$ man true | grep -A1 ^NAME
NAME
true - do nothing, successfully
Por que...
usar -c
com tmux?
Como realmente nos preocupamos apenas com o processo de inicialização do tmux
, não precisamos usá-lo de forma interativa. Portanto, iremos instruí-lo a executar um comando no lugar do nosso shell interativo normal.
usar true
como comando tmux?
Porque sai muito rapidamente e manterá nosso log curto.
usar -o tmux.strace
com strace?
É apenas um arquivo para armazenar a saída. Nomear as coisas é difícil. Não era importante combinar o nome base ou a extensão com qualquer outra coisa.
usar -f
com strace?
Presumo que você leu o trecho da página de manual e nãoredundar. Qualquer aplicativo razoavelmente complexo criará processos filhos. Como tmux
é magnificamente complexo, definitivamente queremos rastreá-los também.
usar -s9999
com strace?
Como estamos gravando a saída em um arquivo, não precisamos de linha truncada para caber na largura do terminal. Defina-o grande. Trate de exibi-lo mais tarde se for um problema.
Por que fazernada disso?
Se porqualquer, você quer dizer escrever esta resposta longa ...
- Porque eu treino equipes de engenharia e irei indicar esta resposta.
- Porque Giles...
- é um maldito herói
- teve 0 votos positivos em seus comentários por mais de 10 anos
- passou despercebido por muito tempo e me recuso a deixar isso continuar
Se você não entende por que esse processo éO caminhopara responder a uma pergunta como "Alguma ideia do que há de errado com o carregamento da conf?" então eu encaminharia você para oProblema XY
Não é sóquestionadoresque se enquadram no problema XY. Istoextremamentecomum para respostas para ~cometer esse erro~ faça isso também. Nesse caso, muitas respostas a esta pergunta instruem o leitor sobre como carregar/recarregar um arquivo de configuração após o início do processo. Isso sugere ignorar o fato de o processo não carregar o arquivo como deveria.
Se você chegou até aqui, o que quero que você aprenda é que só é correto ignorar uma falha se você:
- passar por um bloqueador para que você possa se remover como bloqueador de outros
- voltarei para corrigir o problema corretamente mais tarde
A conclusão
Muitos problemas podem ser resumidos em "O que há de errado com o carregamento do arquivo?". Essa pergunta deve despertar o sentido aranha na forma de "Ele está tentando carregar o arquivo? O que está acontecendo quando ele tenta?"
Você pode/deve[?] strace
resolver qualquer coisa que possa ser questionada como:
- O que esse processo está tentando fazer?
- O que éistoexperimentando quando tenta fazer aquilo [coisa que está tentando fazer]?
Muitas vezes, énão é uma falha do processofazer uma coisa, masuma falha do usuárioesperando que o processo faça alguma coisa. E o processo passa por muitas coisas das quais o usuário não é informado.
Chega de pontificação abstrata. Vamos considerar um exemplo:
$ tmux kill-server; rm tmux.strace; strace -s9999 -f -o tmux.strace tmux -c true
no server running on /tmp/tmux-1000/default
$ ls -lh tmux*
-rw-r--r-- 1 bruno bruno 21K Jun 11 10:58 tmux-client-18358.log
-rw-r--r-- 1 bruno bruno 324M Jun 11 10:58 tmux-server-18360.log
-rw-r--r-- 1 bruno bruno 342K Jun 11 13:48 tmux.strace
$ grep 'tmux\.conf' tmux.strace
521744 readlink("/etc/tmux.conf", 0x7ffe2c0446d0, 1023) = -1 ENOENT (No such file or directory)
521744 readlink("/home/bruno/.tmux.conf", 0x7ffe2c0446d0, 1023) = -1 ENOENT (No such file or directory)
521744 readlink("/home/bruno/.config/tmux/tmux.conf", 0x7ffe2c0446d0, 1023) = -1 ENOENT (No such file or directory)
$ ls -lA /home/bruno/.config/tmux
-rw-r--r-- 1 bruno bruno 307 Jun 10 20:29 tmux.config
Você vê? Veja a saída dos 2 últimos comandos. Talvez ajudasse se eu mostrasse como conserto isso.
$ mv ~/.config/tmux/tmux.config \
~/.config/tmux/tmux.conf
$ tmux kill-server; rm tmux.strace; strace -s9999 -f -o tmux.strace tmux -c true
no server running on /tmp/tmux-1000/default
$ grep -A2 '\.config/tmux/tmux\.conf' tmux.strace
527872 openat(AT_FDCWD, "/home/bruno/.config/tmux/tmux.conf", O_RDONLY) = 8
527872 newfstatat(8, "", {st_mode=S_IFREG|0644, st_size=307, ...}, AT_EMPTY_PATH) = 0
527872 read(8, "set -sg escape-time 0\nset -g mode-keys vi\n\n# remap prefix from 'C-b' to 'C-f'\nset-option -g prefix C-f\nunbind-key C-b\nbind-key C-f send-prefix\n\n# split panes using | and -\nbind | split-window -h\nbind - split-window -v\n# bind \"\33OA\" # scroll natural up\n# bind \"\33OB\" # scroll natural down\nunbind '\"'\nunbind %\n\n", 4096) = 307
Nota: Essa última linha é todo o conteúdo do meu ~/.config/tmux/tmux.conf
arquivo (anteriormente nomeado incorretamente).