Eu li suas perguntas várias vezes antes de perceber que definitivamente tenho uma recomendação para você: vim com o tmux: link
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 'screen', há muito tempo um grampo de muitos cli coders. Uma de suas características vencedoras originais sobre o vim foi a capacidade de fazer janelas divididas verticalmente e horizontalmente. No entanto, a tela avançou e agora pode fazer isso também.
Exemplo:
Outrapartedaconfiguraçãoqueeurecomendariaéumbomconjuntodealiases.Issotornarásuadigitaçãoeinteraçãomuitomaisfácilerápida
Algunsdosmeusfavoritossãomostradosaquicomoexemplos:
aliasgcv='gitcommit'aliasgg='gitgrep'#forsearching(addparameter)aliasgst='gitstatus-sb'#Imustusethis100timesaday!!!aliash='history|tail'aliashg='history|grep'#forsearchingmyhistory(addparameter)aliasl='ls-alFtrG'aliasls='ls--color=auto'aliasmv='mv-i'aliasp='pwd'#atleast200timesaday!so2chrssaved*200=400lesscharacterstotype;)
Osaliasespodemserconfiguradosemumarquivo.bash_aliaseschamadode.bashrccom: #Definiçõesdealias. if[-f~/.bash_aliases];então .~/.bash_aliases fi
Éprovávelquevocêjátenhaessecódigo,portanto,apenasoseupróprioarquivo.bash_aliases.
AmbasasopçõesfuncionamemumMaceissoéumaconsideraçãoimportanteparamim(umusuárioprincipalmentedoUbuntu).
Amaioriadaspessoasqueusamotmuxremapearaschavesparatorná-lomaisfácil.Asligaçõespadrãonãosãotãoboasassim.Aquiestãominhasconfigurações:
$cat~/tmux.conf
#mddtmuxsettingsbindrsource-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 as minhas próprias configurações de .vimrc que eu gosto de ter que 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()
Por último, faço algumas alterações no meu arquivo .bashrc Por exemplo, com shopt -s autocd
quando eu digito um nome de diretório (que existe), meu CD do shell está nesse diretório imediatamente. Bacana! Então aqui estão 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