Trabalhando com o Tmux
Publicado em Developer
rails ruby screen tmux tmuxinator
Ok, esse é um post para quem gosta de trabalhar no terminal. Se você não trabalha, com certeza ou vai estranhar ou vai achar horrível, mas tente dar uma lida para ver se de repente a coisa apetece de alguma forma. ;-)
Eu comecei a me interessar pelo Tmux alguns anos atrás, mesmo sendo um ávido consumidor do GNU Screen, mais para manter sessões abertas em alguns servidores rodando determinados serviços e depois até para montar um ambiente de desenvolvimento remoto que pudesse conectar na hora que quisesse, imediatamente no ponto em que parei. Mais prático, impossível (inclusive aqui tem um artigo do Mark O’Connor mostrando como ele trocou o MacBook dele para trabalhar em um iPad, conectado na Linode).
Alguns amigos ficaram em dúvida sobre a estabilidade do Tmux, fato que posso comprovar que não tive problema algum em quaisquer das sessões que mantive e mantenho abertas por semanas e meses. Ele roda leve, estável, sem problema algum, impressionando até o Theo de Raadt, que disse:
The most impressive thing about tmux, in my view, is how frustrating the code audit was. In 2 hours, I found only one or two nits that had very minor security consequences. It was not accepted into the tree based on license alone. It is high quality code.
Juntando o interesse sobre a ferramenta, a comprovação da sua estabilidade, e algumas considerações sobre a mantenabilidade do Screen, decidi que era hora de mudar. Passei de vez para o Tmux (obrigado pelo tempo juntos, Screen) e estou muito satisfeito. Ainda mais depois de descobrir uma ferramenta que é perfeita para nós que trabalhamos com Ruby: o Tmuxinator, que é uma Rubygem que não necessariamente é somente utilizada por quem desenvolve em Ruby, mas para quem tem Ruby instalado. Ou seja, eu também trabalho em projetos em Java, PHP, etc com essa gem numa boa.
A grande vantagem do Tmuxinator é que podemos abrir várias janelas e panes (as panes são, digamos, janelas dentro das janelas), funcionalidades padrões do Tmux, configurando facilmente um arquivo YAML, o que pode ser um pouco mais trabalhoso se feito "na unha". Uma sessão de exemplo é mostrada no site do Tmuxinator:
# ~/.tmuxinator/project_name.yml # you can make as many tabs as you wish... project_name: Tmuxinator project_root: ~/code/rails_project socket_name: foo # Not needed. Remove to use default socket rvm: 1.9.2@rails_project pre: sudo /etc/rc.d/mysqld start tabs: - editor: layout: main-vertical panes: - vim - #empty, will just run plain bash - top - shell: git pull - database: rails db - server: rails s - logs: tail -f logs/development.log - console: rails c - capistrano: - server: ssh me@myhost
Nessa sessão podemos ver que foram criadas as seguintes janelas (usando tabs):
- Editor, separada na horizontal entre o Vim e o top;
- Shell, rodando o git pull;
- Database, onde foi aberto o console do banco de dados do Rails;
- Server, onde foi disparado o servidor do Rails, no diretório local;
- Logs, com um comando tail mostrando as alterações do log de desenvolvimento;
- Capistrano, aberto sem rodar nada, mas que provavelmente vai rodar vários cap deploy;
- Server, onde conecta via SSH no servidor da aplicação;
Antes de tudo isso, foram indicadas a versão da RVM que o projeto utiliza e um comando (qualquer comando que possa rodar com autoridade do usuário corrente no terminal, ou como no caso, utilizando sudo) para rodar antes de abrir as janelas. Tudo isso alcançado rapidinho com um
tmuxinator project_name
Lógico que podemos customizar esse arquivo do jeito que bem entendermos. Particulamente eu configuro para já clonar o repositório antes de abrir todas as janelas/panes. No caso do uso do Tmuxinator, eu utilizo geralmente para trabalhar nos projetos sem manter a sessão aberta. Nesse caso, chamo o Tmuxinator, que já configura tudo para mim, trabalho no projeto e no final mando um git push e mato a sessão e o diretório. Lógico que nada me impede de manter a sessão aberta junto com várias outras do Tmux no servidor.
Aí vocês podem perguntar: mas não fica feio pra diacho trabalhar direto no terminal? Bom, algumas coisas são perdidas, como o sublinhado da correção ortográfica do Vim, mas as palavras ficam em cor de background diferente. ;-) As fontes? Ué, configure as fontes do seu terminal. Eu atualmente estou utilizando a Inconsolata, que fica bem legal. Ou seja, não é o fim do mundo, com a vantagem que podemos trabalhar sem tirar as mãos do teclado, e, em fases de produtividade sem distrações mais punks, mandar um fullscreen no terminal e mandar bala.
Como uma ótima fonte de referência, tanto para o Tmux como para o Tmuxinator, recomendo o livro que saiu faz pouco tempo pela Pragmatic Programmers, que se chama ... Tmux. Na página do livro eles fazem algumas brincadeiras com o fato de não ter que usar o mouse, mas sabemos que vai muito mais além disso, certo? ;-)
Comentários
Comentários fechados.
Artigos anteriores
- Pull requests em modo raiz - sex, 22 de dezembro de 2023, 09:57:09 -0300
- Qual a idade do seu repositório? - ter, 27 de dezembro de 2022, 12:50:35 -0300
- Utilizando ctags em projetos Rails mais recentes - qui, 24 de junho de 2021, 08:23:43 -0300
- Fazendo o seu projeto brotar - seg, 15 de julho de 2019, 08:57:05 -0300
- Learn Functional Programming with Elixir - sex, 02 de março de 2018, 18:47:13 -0300
- Ambiente mínimo - Driver Driven Development - qua, 23 de agosto de 2017, 15:15:03 -0300
- Ambiente mínimo - repositórios de código - dom, 16 de abril de 2017, 13:02:14 -0300
- Ambiente mínimo - terminal e navegador - dom, 02 de abril de 2017, 21:43:29 -0300
- Utilizando muitas gems no seu projeto? - sáb, 29 de outubro de 2016, 11:57:55 -0200
- Desenvolvedores e inteligência artificial - seg, 11 de julho de 2016, 09:09:38 -0300
Hummm interessante. Ainda sou meio refém do Screen ( até porque não conhecia o Tmux ).
Vou dar uma olhada nele :-)
Valeu TaQ, resolveu meu problema. :-)
E definitivamente preciso colocar a seleção de texto do tmux na minha rotina de trabalho. Ainda me pego usando o mouse para copiar/colar alguma coisa e isso é bem ineficiente.
Eu também adoro o tmux e o tmuxinator, inclusive, eu ía escrever um post sobre o assunto essa semana mesmo, já que você escreveu, me economizou o assunto :)
Guilherme, eu uso o scrolling do Tmux mesmo, como se fosse selecionar um texto, usando o Ctrl+b [. Aí dá para usar o Page Up/Down de boa, e se estiver habilitado o modo do Vi, funcionam todas as teclas de movimentação (h,j,k,l, Ctrl+f, Ctrl+b).
Aí aproveita, vai que precisa copiar alguma coisa, aperta espaço, seleciona (com setas ou teclas do Vi), aperta Enter, posiciona e cola com Ctrl+b ]. :-)
Mas também tem o jeito convencional:
set -g terminal-overrides 'xterm*:smcup@:rmcup@'
Aqui tem uma explicação sobre isso: https://blogs.oracle.com/samf/entry/smcup_rmcup_hate
Por via das dúvidas, isso também está no meu .tmux.conf, mas eu continuo usando a primeira opção. :-)
Gosto muito do tmux, uso diariamente. A única coisa que me irrita um pouco nele é que shift+pg up deixa de funcionar para "rolar" o conteúdo já impresso no terminal para cima.
Já teve esse problema? Devo estar usando pesquisas erradas no Google, porque ainda estou brigando com isso.