Configuração sugerida para um ambiente de programação baseado em texto ultraleve no linux


14

Estou procurando sugestões para uma configuração para minhas necessidades específicas. Não faço muito linux desde a faculdade e quero voltar a ele como um hobby. Eu tenho um hardware não muito poderoso (512 MB de ram, núcleo único). Quero fazer tudo por meio de shells e editores baseados em texto, como o vim. Meu objetivo é nunca tocar o mouse.

Eu preciso da capacidade de ter vários shells abertos ao mesmo tempo, um executando um servidor web, um executando vim, um executando meu pipeline de criação de aplicativos, outro para comandos de shell ad-hoc, como wget, grepping e untarring, etc. poder abrir novas conchas e alternar rapidamente entre elas com o teclado.

Mas mesmo que eu queira várias conchas, eu não quero um ambiente gráfico de área de trabalho. Eu nunca quero ser tentado a usar o mouse; parte do meu propósito é me forçar a aprender a maneira pela linha de comando de executar várias tarefas.

Também quero poder tirar proveito do meu monitor grande, executando o vim com algumas centenas de colunas mergulhadas em camadas.

Isso é possível?


1
Dê uma olhada no dvtm ... Você também pode combiná-lo com o tmux ou screen.
jasonwryan

1
Esta pergunta pode ser mais adequada como wiki da comunidade.
jw013

Respostas:


5

Eu li suas perguntas várias vezes antes de perceber que definitivamente tenho uma recomendação para você: vim with tmux: http://tmux.sourceforge.net/

O tmux é um 'multiplexador de tela' que permite que você tenha várias janelas e painéis 'dentro de 1'

É um sucessor do venerável programa de 'tela', há muito um grampo de muitos codificadores de cli. Um de seus recursos vencedores originais sobre o vim era a capacidade de fazer janelas divididas verticalmente e horizontalmente. No entanto, a tela avançou e agora também pode fazer isso.

Exemplo:

insira a descrição da imagem aqui

Outra parte da configuração que eu recomendaria é um bom conjunto de aliases. Isso tornará sua digitação e interação muito mais fáceis e rápidas

Alguns dos meus favoritos são mostrados aqui como exemplos:

alias gcv='git commit'
alias gg='git grep ' # for searching (add parameter)
alias gst='git status -sb' # I must use this 100 times a day!!!
alias h='history | tail'
alias hg='history | grep' # for searching my history (add parameter)
alias l='ls -alFtrG'
alias ls='ls --color=auto'
alias mv='mv -i'
alias p='pwd'# at least 200 times a day! so 2 chrs saved * 200 = 400 less characters to type ;)

Aliases podem ser configurados em um arquivo .bash_aliases chamado de .bashrc com: # Definições de alias. if [-f ~ / .bash_aliases]; então . ~ / .bash_aliases fi

Provavelmente, você já possui esse código, então apenas seu próprio arquivo .bash_aliases.

Ambas as opções funcionam em um Mac e isso é uma consideração importante para mim (principalmente um usuário do Ubuntu).

A maioria das pessoas que usam o tmux remapeiam as chaves para facilitar. As ligações padrão não são tão boas assim. Aqui estão as minhas configurações:

$ cat ~ / tmux.conf

# mdd tmux settings
bind r source-file ~/.tmux.conf \; display "Reloaded!"  # Reload with ctrl-r
set -g prefix C-a         # prefix from ctrl-b to ctrl-a
unbind C-b                # allow ctrl-b for other things
set -sg escape-time 1     # quicker responses
bind C-a send-prefix      # Pass on ctrl-a for other apps
set -g base-index 1        # Numbering of windows
setw -g pane-base-index 1  # Numbering of Panes
# bind | split-window -h    # Split panes horizontal
bind \ split-window -h    # Split panes horizontal
bind - split-window -v    # Split panes vertically
bind h select-pane -L     # Switch to Pane Left
bind j select-pane -D     # Switch to Pane Down
bind k select-pane -U     # Switch to Pane Up
bind l select-pane -R     # Switch to Pane Right
bind -r C-h select-window -t :-  # Quick Pane Selection
bind -r C-l select-window -t :+  # Quick Pane Selection
bind -r H resize-pane -L 5       # Switch to Pane Left
bind -r J resize-pane -D 5       # Switch to Pane Down
bind -r K resize-pane -U 5       # Switch to Pane Up
bind -r L resize-pane -R 5       # Switch to Pane Right
setw -g mode-mouse off           # Mouse Off
set -g mouse-select-pane off     # Mouse Off  
set -g mouse-resize-pane off     # Mouse Off
set -g mouse-select-window off   # Mouse Off
#set -g  default-terminal "screen-256color"
setw -g monitor-activity on      # Activity Alerts
set -g visual-activity on
set -g status-fg white           # Status line Colors
set -g status-bg black
setw -g window-status-fg cyan    # Window list color
setw -g window-status-bg default
setw -g window-status-attr dim
setw -g window-status-current-fg white     # Active Window Color
setw -g window-status-current-bg red
setw -g window-status-current-attr bright
set -g pane-border-fg green      # Pane colors
set -g pane-border-bg black 
set -g pane-active-border-fg white 
set -g pane-active-border-bg yellow
set -g message-fg white          # Command/Message Line.
set -g message-bg black
set -g message-attr bright
set -g status-left-length 40     # Status Line, left side
set -g status-left "#[fg=white]Session: #S #[fg=yellow]#I #[fg=cyan]#P"
set -g status-utf8 on            # Status Line, right side
set -g status-right "-------"
set -g status-interval 60        # frequency of status line updates
set -g status-justify centre     # center window list
setw -g mode-keys vi             # vi keys to move 
unbind v                         # Open panes in same directory as tmux-panes script
unbind n
bind v send-keys " ~/tmux-panes -h" C-m
bind n send-keys " ~/tmux-panes -v" C-m
unbind Up                        # Maximizing and Minimizing...
bind Up new-window -d -n tmp \; swap-pane -s tmp.1 \; select-window -t tmp
unbind Down
bind Down last-window \; swap-pane -s tmp.1 \; kill-window -t tmp
bind P pipe-pane -o "cat >>~/#W.log" \; display "Toggled logging to ~/#W.log"
# Make keys for copy mode be like vi
unbind [
bind Escape copy-mode
unbind p
bind p paste-buffer
bind -t vi-copy 'v' begin-selection
bind -t vi-copy 'y' copy-selection

Finalmente (para fechar o loop), aqui estão minhas próprias configurações .vimrc que eu gosto de tornar o shell mais fácil de usar:

" mdd specific stuff --- start
set hlsearch
set incsearch
set number
" more3 mdd stuff - set tabs to be spaces and length of 2 characters.
set smartindent
set tabstop=2
set shiftwidth=2
set expandtab
" mdd specific stuff --- end
"
" Forget being compatible with good ol' vi
set nocompatible

" Get that filetype stuff happening
filetype on
filetype plugin on
filetype indent on

" Turn on that syntax highlighting
syntax on

" Why is this not a default
set hidden

" Don't update the display while executing macros
set lazyredraw

" At least let yourself know what mode you're in
set showmode

" Enable enhanced command-line completion. Presumes you have compiled
" with +wildmenu.  See :help 'wildmenu'
set wildmenu

" Let's make it easy to edit this file (mnemonic for the key sequence is
" 'e'dit 'v'imrc)
nmap <silent> ,ev :e $MYVIMRC<cr>

" And to source this file as well (mnemonic for the key sequence is
" 's'ource 'v'imrc)
nmap <silent> ,sv :so $MYVIMRC<cr>

highlight ExtraWhitespace ctermbg=red guibg=red
match ExtraWhitespace /\s\+$/
autocmd BufWinEnter * match ExtraWhitespace /\s\+$/
autocmd InsertEnter * match ExtraWhitespace /\s\+\%#\@<!$/
autocmd InsertLeave * match ExtraWhitespace /\s\+$/
autocmd BufWinLeave * call clearmatches()

Finalmente, faço algumas alterações no meu arquivo .bashrc. Por exemplo, shopt -s autocdquando digito um nome de diretório (que existe), meu CD do shell é inserido nesse diretório imediatamente. Bacana! Então, aqui estão as minhas alterações .bashrc:

# Automatic cd'ing
shopt -s autocd

# Have cd show directory info ('cos my shell doesn't show full directory path in $PS1 prompt (intended).
cd() {
      builtin cd "$@" && pwd 
  }

# enable programmable completion features
if [ -f /etc/bash_completion ] && ! shopt -oq posix; then
    . /etc/bash_completion
fi

PATH=$PATH:$HOME/.rvm/bin # Add RVM to PATH for scripting
[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm"  # Load RVM into a shell session *as a function*

# mdd Terminal Multiplexor 6/15/2012
if [[ ! $TERM =~ screen ]]; then
    exec tmux
fi

[ -z "$TMUX" ] && export TERM=xterm-256color

export EDITOR=vim

git config --global --add color.ui true

Boa resposta detalhada. Estou usando o tmux há cerca de um ano (e vi / vim há cerca de 25), mas peguei algumas coisas aqui.
Dan

Ótima, ótima resposta para um noob como eu. Sobre a única coisa que falta é quais plugins do vim você usa ... mas isso é outra questão para outro dia. :) Mais uma vez obrigado ... Embora eu demore uma eternidade para passar por isso e experimentar tudo, eu queria ir em frente e dar a resposta aceita.
Kevin Pauli

Claro, acho que não estou usando nenhum plug-in, mas sei que existem muitos disponíveis, incluindo alguns para minha área de ruby ​​on rails.
quer

2
Muito do que você diz aqui pode ser útil, mas uma coisa está errada: o vim pode facilmente dividir os painéis na horizontal e na vertical.
dubiousjim

1
Atualizado para observar que a tela pode fazer divisões horizontais e verticais agora.
precisa

6

Estou usando o XMonad + tmux + Emacs para uma configuração semelhante.

Eu usei o ratpoison por um ano no passado, mas o XMonad se sentiu mais robusto. Nunca tive problemas nas caixas de 256 MB e 512 MB. Ratpoison teve alguns problemas de estabilidade, mas isso é anedótico e as coisas podem ter mudado desde então.

Eu também usei a tela GNU, mas o tmux tem alguns recursos que a tela não possui.

Se você já conhece o vim, é melhor não aprender uma nova ferramenta. Caso contrário, o Emacs pode empregar várias conchas ( C-u M-x shell), usar seu shell favorito ( M-x term), você pode escrever, compilar e depurar seus programas, ler seus e-mails, hangout no IRC, ler páginas da web / info / man, executar a maioria dos REPL shells (por exemplo M-x run-python), use git / hg / svn dentro dele, edite arquivos remotos com TRAMP, use dired para executar quase todas as operações de arquivo, use grep / find / ack dentro dele. Você pode usar o Emacs com ou sem o X. Você não precisa de um multiplexador de terminal como screen ou tmux, mas eu prefiro executar o emacs como servidor e usar o emacsclient do tmux se estiver executando a partir do shell.


Eu sugeriria usar terminator! Mas a escolha é puramente sua!
Pranit Bauva

3
  • solução sem nenhum X: framebuffer + console Linux + tela GNU + vim + w3m
  • solução com X mas sem ambiente de desktop: dwm + urxvt + tela GNU + vim + w3m + surf

O dwm usa apenas algumas centenas de kB de memória, acionado por teclado, mas você também pode usar o mouse, se quiser. Verifique http://suckless.org para ferramentas mais simples e poderosas.


2

Para vários shells com fácil navegação no teclado entre eles, convém procurar no GNU Screen , ou byobu (que é um aprimoramento).


2

Empreendi um empreendimento semelhante há alguns meses, abandonando o mouse e explorando uma infinidade de configurações e gerenciadores de janelas. Parece que você já recebeu muitas sugestões úteis, mas achei que alguns centavos extras não poderiam machucar. Aqui estão os meus dois:

Dê uma olhada no gerenciador de janelas do i3. É leve, com configuração simples e não requer uma recompilação após alterar a configuração. A funcionalidade lado a lado e os espaços de trabalho marcados não significam mouse e infinitas possibilidades com base na preferência e no espaço da tela. Os programas podem ser atribuídos a tags e as chaves podem ser vinculadas a praticamente qualquer coisa. O i3status ou o conky são facilmente direcionados para o i3 para obter informações do sistema. Instale o dmenu e desconecte o mouse.

Tente uma distribuição leve. Arch, Gentoo e Slackware oferecem opções diferentes para configurar um ambiente leve. Comece pequeno e preste atenção às dependências. Instale apenas o que você precisa e aprenda a configurá-lo corretamente. Não inicie o X na inicialização. Aprenda a usar todas as ferramentas às suas custas. Vim é uma fera. Se você já conhece, use-o. Caso contrário, aprenda. Preste atenção aos detalhes. Saiba o que você tem no seu sistema e por que ele está lá.


Apoiando a abordagem "distribuição leve". Ele realmente obriga a sujar as mãos, mesmo que elas o exijam comando por comando (o Manual de Instalação do Gentoo é excelente), porque cada sistema é diferente. A instalação inicial nem fornece X, então você fica preso na linha de comando.
ND

1

Eu tinha um desejo semelhante cerca de seis meses atrás. Principalmente porque eu estava trabalhando via SSH o dia todo. Como já foi sugerido, use a tela GNU. É muito terrível (IMHO) logo após a instalação. Contudo! É altamente personalizável através do arquivo .screenrc. Existem vários tutoriais on-line que fornecem código que você pode recortar e colar para obtê-lo da maneira que desejar.

Fui ao ponto de montar alguns scripts para configurar esse ambiente - MALiCE - 'My Awesome Linux Coding Environment'. Está disponível no Github aqui:

Malícia

Isso também documenta muitos atalhos de teclado, bem como exemplos de arquivos .muttrc e .screenrc - configurados para funcionar com coisas como o gmail.

Observe que não é perfeito, mas pode economizar algum tempo e esforço para ver alguns dos arquivos de configuração e scripts. Há um forte viés de vim.

Também recomendo programas como o cmus (media player baseado em texto - muito bom) e o mutt (cliente de email - novamente configurado através do arquivo de texto .muttrc). Também existem clientes de IRC baseados em texto e, acredite ou não, decodificadores de vídeo baseados em texto que transformarão o vídeo em ASCII - um pouco extremo, mas cada um por si.

Se você não deseja uma área de trabalho, existem várias opções. Por exemplo, você pode instalar o slackware, que, se bem me lembro, inicializa corretamente em uma interface de linha de comando. Você precisa fazer o possível para iniciar a GUI.


Poderíamos adicionar o elinksnavegador da web a essa lista de bons utilitários baseados em texto.
Stéphane Chazelas

Como ele se compara com outros navegadores da Web baseados em texto? Eu nunca poderia se acostumar a navegar na web a partir da linha de comando: p


0

A chave para isso não é a distribuição, mas as ferramentas. Pare de usar as ferramentas da GUI e ajuste as ferramentas da CLI para que pareçam e se comportem exatamente como você gostaria. É uma maneira de editar ~/.Xresourcese, em seguida, carregá-lo com xrdbno ~/.xinitrc. Lá, você também pode iniciar um monte de aplicativos que você sempre usa.

Obviamente você precisa de uma boa concha: eu diria zsh. Você terá que trabalhar bastante ~/.zshrc. (Mas o bash também funcionaria, é claro. Então, ~/.bashrcseria o lugar.)

Segundo, um editor. Emacs ou vim, dependendo do que você usa atualmente. Um editor menos avançado (por exemplo, nano) não funciona. Assim como no shell, você trabalha muito ~/.emacsou os arquivos init correspondentes.

Você precisa incorporar o máximo que puder no seu editor de texto. Vou dar alguns exemplos do mundo do Emacs, simplesmente porque sou um usuário do Emacs. Para email, rmail. Para gerenciamento de arquivos, direcionado. Para navegação na web, W3M. Para notícias, gnus (embora eu não o use). Para páginas de manual M-x man. E assim por diante.

O motivo para você fazer isso e não usar outros aplicativos CLI (por exemplo, apenas manpara páginas de manual, lynx para navegação etc.) é:

1) o nível de integração (kill, yank, faça atalhos; tudo em um piscar de olhos ...)

2) os atalhos do teclado para navegar pelo cursor, pesquisar etc. (por exemplo, sua memória muscular)

Quanto ao X, você não precisa abandoná-lo. Só porque você deseja tudo na CLI não significa que você não deseja o GFX (ou - pelo menos, eu quero apenas o CLI e o GFX). Por exemplo, embora você modifique imagens com (CLI) mogrify ou converte, você ainda deseja exibi-lo para verificar o resultado (por exemplo, no gliv; basta desativar a barra de menus para não ficar tentado a usar o mouse). Outro exemplo são os documentos LaTeX e PDF.

Quanto ao terminal, a maioria das pessoas diria screen ou tmux, mas você também pode usar os terminais virtuais do Linux (o console ou ttys). No X, o urxvt possui uma extensão Perl que permite guias. Para esses (ttys e urxvt), você pode configurar uma interface uniforme, por exemplo, Alt-J / K para alternar entre guias, para que você não precise procurar as teclas de seta (ou o que for padrão).

Boa sorte :) Sinta-se à vontade para me enviar algumas sugestões quando terminar (ou quase lá ... você nunca termina), pois estou no mesmo caminho que você.

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.