Configuración sugerida para un entorno de programación basado en texto ultra ligero en Linux

14

Estoy buscando sugerencias para una configuración para mis necesidades particulares. No he hecho mucho Linux desde la universidad y quiero volver a dedicarme a él como un hobby. Tengo un hardware no demasiado potente (512 MB de RAM, un solo núcleo). Quiero hacer todo a través de shells y editores basados ​​en texto, como vim. Mi objetivo es nunca tocar el mouse.

Necesito la capacidad de tener múltiples shells abiertos a la vez, uno que ejecute un servidor web, otro que ejecute vim, otro que ejecute la canalización de compilación de mi aplicación, otro para comandos de shell ad-hoc como wget, grepping y untarring, etc. Necesito ser capaz de abrir nuevos shells y cambiar rápidamente entre ellos con el teclado.

Pero aunque quiero múltiples shells, no quiero un entorno de escritorio gráfico. No quiero volver a sentirme tentado a usar el mouse; Parte de mi propósito es obligarme a aprender la forma de hacer varias tareas en la línea de comandos.

También quiero poder aprovechar mi gran monitor, ejecutando vim con un par de cientos de columnas en pantalla desplegada.

es posible?

Kevin Pauli
fuente
1
Echa un vistazo a dvtm ... También puedes combinarlo con tmux o screen.
jasonwryan
1
Esta pregunta puede ser más adecuada como wiki comunitario.
jw013

Respuestas:

5

Leí sus preguntas varias veces antes de darme cuenta de que definitivamente tengo una recomendación para usted: vim with tmux: http://tmux.sourceforge.net/

tmux es un 'multiplexor' de pantalla que le permite tener varias ventanas y paneles 'dentro de 1'

Es el sucesor del venerable programa 'screen', durante mucho tiempo un elemento básico de muchos codificadores de cli. Una de sus características ganadoras originales sobre VIM fue la capacidad de hacer ventanas divididas tanto vertical como horizontalmente. Sin embargo, la pantalla avanzó y ahora también puede hacerlo.

Ejemplo:

ingrese la descripción de la imagen aquí

Otra parte de la configuración que recomendaría es un buen conjunto de alias. Esto hará que tu escritura e interacción sean mucho más fáciles y rápidas

Algunos de mis favoritos se muestran aquí como ejemplos:

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 ;)

Los alias se pueden configurar en un archivo .bash_aliases que se llama desde .bashrc con: # Definiciones de alias. if [-f ~ / .bash_aliases]; luego . ~ / .bash_aliases fi

Es probable que ya tenga ese código, así que solo su propio archivo .bash_aliases.

Ambas opciones funcionan en una Mac y esa es una consideración importante para mí (en su mayoría usuario de Ubuntu).

La mayoría de las personas que usan tmux reasignan las teclas para que sea más fácil. Los enlaces predeterminados simplemente no son tan buenos. Aquí están mis configuraciones:

$ 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 cerrar el ciclo), aquí están mis configuraciones de .vimrc que me gusta tener que hacer que el shell sea más 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, realizo algunos cambios en mi archivo .bashrc. Por ejemplo, shopt -s autocdcuando escribo un nombre de directorio (que existe) mis CD de shell en ese directorio de inmediato. ¡Hábil! Así que aquí están mis cambios .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
Michael Durrant
fuente
Buena respuesta detallada. He estado usando tmux durante un año aproximadamente (y vi / vim durante aproximadamente 25), pero aprendí algunas cosas aquí.
Dan
Genial, excelente respuesta para un novato como yo. Lo único que falta es qué complementos vim usas ... pero esa es otra pregunta para otro día. :) Gracias de nuevo ... aunque me llevará una eternidad revisarlo y probarlo todo, quería seguir adelante para darle la respuesta aceptada.
Kevin Pauli
Claro, realmente creo que no estoy usando ningún complemento, pero sé que hay muchos disponibles, incluidos algunos para mi área de ruby ​​on rails.
Michael Durrant
2
Gran parte de lo que dices aquí puede ser útil, pero una cosa está mal: vim puede dividir fácilmente paneles horizontales y verticales.
dubiousjim
1
Actualizado para tener en cuenta que la pantalla puede hacer divisiones horizontales y verticales ahora.
Michael Durrant
6

Estoy usando XMonad + tmux + Emacs para una configuración similar.

Utilicé ratpoison durante un año en el pasado, pero XMonad se sintió más robusto. Nunca tuve ningún problema en mis cajas de 256 MB, 512 MB con él. Ratpoison tuvo algunos problemas de estabilidad, pero esto es anecdótico y las cosas podrían haber cambiado desde entonces.

También utilicé la pantalla GNU pero tmux tiene algunas características que la pantalla no tiene.

Si ya conoce vim, será mejor que no aprenda una nueva herramienta. Si no lo hace, Emacs puede emplear múltiples shells ( C-u M-x shell), use su shell favorito (M-x term ), puede escribir, compilar y depurar sus programas, leer sus correos, pasar el rato en IRC, leer páginas web / info / man, ejecutar la mayoría de REPL shells (por ejemplo M-x run-python), use git / hg / svn dentro de él, edite archivos remotos con TRAMP, use dired para hacer casi todas las operaciones de archivo, use grep / find / ack dentro de él. Puede usar Emacs con o sin X. No necesita un multiplexor de terminal como screen o tmux, pero prefiero ejecutar emacs como servidor y usar emacsclient desde tmux si lo ejecuta desde shell.

Emre Sahin
fuente
Sugeriría usar terminador! ¡Pero es pura elección de uno!
Pranit Bauva
3
  • solución sin X en absoluto: framebuffer + consola Linux + pantalla GNU + vim + w3m
  • solución con X pero sin entorno de escritorio: dwm + urxvt + pantalla GNU + vim + w3m + surf

dwm usa solo unos pocos cientos de kB de memoria, controlado por teclado, pero también puede usar el mouse si lo desea. Visite http://suckless.org para obtener herramientas más simples pero potentes.

Jing
fuente
2

Para múltiples shells con fácil navegación del teclado entre ellos, es posible que desee mirar en la pantalla GNU o byobu (que es una mejora de la misma).


fuente
2

Hice un esfuerzo similar hace un par de meses, abandoné mi mouse y exploré una multitud de configuraciones y administradores de ventanas. Parece que ya te han ofrecido muchas sugerencias útiles, pero pensé que un par de centavos adicionales no podrían hacer daño. Aquí están mis dos:

Echa un vistazo a i3 window manager. Es ligero, con una configuración simple y no requiere una recompilación después de alterar la configuración. La funcionalidad de mosaico y los espacios de trabajo etiquetados significan que no hay mouse y un sinfín de posibilidades basadas en las preferencias y el espacio de la pantalla. Los programas pueden asignarse a etiquetas y las teclas pueden vincularse a casi cualquier cosa. i3status o conky se canalizan fácilmente a i3 para obtener información del sistema. Instale dmenu y desconecte su mouse.

Prueba una distribución ligera. Arch, Gentoo y Slackware ofrecen diferentes opciones para configurar un entorno de luz. Comience con poco y preste atención a las dependencias. Instale solo lo que necesita y aprenda a configurarlo correctamente. No inicies X en el arranque. Aprenda a usar todas las herramientas a su cargo. Vim es una bestia. Si ya lo sabes, úsalo. Si no, aprende. Ponga atención a los detalles. Aprenda lo que tiene en su sistema y por qué está allí.

marquezc329
fuente
Secundando el enfoque de "distribución ligera". Realmente lo obliga a ensuciarse las manos, incluso si se lo presentan comando por comando (el Manual de instalación de Gentoo es excelente), porque cada sistema es diferente. La instalación inicial ni siquiera te da X, por lo que estás atascado en la línea de comando.
ND Geek
1

Tenía un deseo similar hace unos seis meses. Principalmente porque estaba trabajando a través de SSH todo el día. Como ya se ha sugerido, use la pantalla GNU. Es bastante terrible (en mi humilde opinión) justo después de instalarlo. ¡Sin embargo! Es altamente personalizable a través del archivo .screenrc. Hay muchos tutoriales en línea que proporcionan código que puede cortar y pegar para obtenerlo como desee.

Llegué al extremo de reunir algunos scripts para configurar dicho entorno, MALiCE, 'My Awesome Linux Coding Environment'. Está disponible en Github aquí:

Malicia

Esto también documenta muchos atajos de teclado, así como una muestra de archivos .muttrc y .screenrc, que están configurados para funcionar con cosas como gmail.

Tenga en cuenta que no es perfecto, pero puede ahorrarle algo de tiempo y esfuerzo para echar un vistazo a algunos de los archivos y scripts de configuración. Hay un fuerte sesgo vim.

También recomendaría programas como cmus (reproductor multimedia basado en texto - bastante bueno) y mutt (cliente de correo electrónico - nuevamente configurado a través del archivo de texto .muttrc). También hay clientes IRC basados ​​en texto y créanlo o no, decodificadores de video basados ​​en texto que convertirán el video en ASCII, un poco extremo pero cada uno por su cuenta.

Si no quieres un escritorio, hay varias opciones. Por ejemplo, podría instalar slackware, que si no recuerdo mal, se inicia correctamente en una interfaz de línea de comandos. Tienes que salir de tu camino para iniciar la GUI.

Rui F Ribeiro
fuente
Podríamos agregar el elinksnavegador web a esa lista de buenas utilidades basadas en texto.
Stéphane Chazelas
¿Cómo se compara con otros navegadores web basados ​​en texto? Nunca podría acostumbrarme a la navegación web desde la línea de comandos: p
0

La clave para esto no es la distribución, sino las herramientas. Simplemente deje de usar las herramientas de la GUI y modifique las herramientas de la CLI para que se vean y se comporten exactamente como lo desee. Una forma es editar ~/.Xresourcesy luego cargarlo xrdben~/.xinitrc . Allí, también podría iniciar un montón de aplicaciones que siempre usa.

Obviamente necesitas un buen shell: yo diría zsh. Tendrás que trabajar mucho ~/.zshrc. (Pero bash también funcionaría, por supuesto. Entonces,~/.bashrc sería el lugar).

En segundo lugar, un editor. Emacs o vim, dependiendo de cuál use actualmente. Un editor menos avanzado (p. Ej., Nano) no funcionará. Al igual que con el shell, harías mucho trabajo en~/.emacs los archivos de inicio correspondientes.

Debe incorporar todo lo que pueda en su editor de texto. Daré algunos ejemplos del mundo de Emacs, simplemente porque soy un usuario de Emacs. Para el correo, rmail. Para la gestión de archivos, dired. Para la navegación web, W3M. Para noticias, gnus (aunque no lo uso). Para páginas man,M-x man . Y así.

La razón por la que haría esto y no usaría otras aplicaciones de CLI (por ejemplo, solo manpara páginas de manual, lynx para navegar, etc.) es:

1) el nivel de integración (matar, tirar, hacer accesos directos; todo en un abrir y cerrar de ojos ...)

2) los atajos de teclado para navegar el cursor, buscar, etc. (es decir, su memoria muscular)

En cuanto a X, no necesitas abandonarlo. El hecho de que quiera todo en CLI no significa que no quiera GFX en absoluto (o, al menos, solo quiero CLI, y GFX). Por ejemplo, aunque modifique imágenes con (CLI) mogrify o convertir, aún querría mostrarlo para verificar el resultado (por ejemplo, en gliv; simplemente deshabilite la barra de menú para no verse tentado a usar el mouse). Otro ejemplo son los documentos LaTeX y PDF.

En cuanto al terminal, la mayoría de la gente diría screen o tmux, pero también podría usar los terminales virtuales de Linux (la consola o ttys). En X, urxvt tiene una extensión Perl que habilita pestañas. Para aquellos (ttys y urxvt), puede configurar una interfaz uniforme, por ejemplo, Alt-J / K para cambiar entre pestañas, por lo que no tiene que alcanzar las teclas de flecha (o lo que sea predeterminado).

Buena suerte :) No dudes en enviarme algunos consejos cuando hayas terminado (o casi allí ... nunca has terminado), ya que estoy en el mismo camino que tú.

Emanuel Berg
fuente