Configuration suggérée pour un environnement de programmation textuel ultra-léger sous Linux

14

Je recherche des suggestions de configuration pour mes besoins particuliers. Je n'ai pas fait beaucoup de Linux depuis l'université et je veux y revenir comme un hobby. J'ai du matériel pas trop puissant (512 Mo de RAM, simple cœur). Je veux tout faire via des shells et des éditeurs basés sur du texte, tels que vim. Mon objectif est de ne jamais toucher la souris.

J'ai besoin d'avoir la possibilité d'ouvrir plusieurs shells à la fois, l'un exécutant un serveur Web, un exécutant vim, un exécutant mon pipeline de génération d'applications, un autre pour les commandes de shell ad hoc telles que wget, grepping et untarring, etc. pouvoir ouvrir de nouveaux shells et basculer rapidement entre les shells avec le clavier.

Mais même si je veux plusieurs shells, je ne veux pas d'un environnement de bureau graphique. Je ne veux jamais être tenté d'utiliser la souris; une partie de mon objectif est de me forcer à apprendre la façon de faire en ligne de commande diverses tâches.

Je veux également pouvoir profiter de mon grand écran, exécutant vim avec quelques centaines de colonnes en dip-dlay.

Est-ce possible?

Kevin Pauli
la source
1
Jetez un œil à dvtm ... Vous pouvez également le combiner avec tmux ou screen.
jasonwryan
1
Cette question peut être plus appropriée en tant que wiki communautaire.
jw013

Réponses:

5

J'ai lu vos questions plusieurs fois avant de réaliser que j'ai définitivement une recommandation pour vous: vim avec tmux: http://tmux.sourceforge.net/

tmux est un «multiplexeur d'écran» qui vous permet d'avoir plusieurs fenêtres et volets «en 1»

Il est le successeur du vénérable programme «screen», longtemps un incontournable de nombreux codeurs cli. L'une de ses fonctionnalités primées par rapport à vim était la possibilité de diviser les fenêtres verticalement et horizontalement. Cependant, l'écran a progressé et peut désormais le faire également.

Exemple:

entrez la description de l'image ici

Une autre partie de la configuration que je recommanderais est un bon ensemble d'alias. Cela rendra votre saisie et votre interaction beaucoup plus faciles et plus rapides

Certains de mes favoris sont présentés ici à titre d'exemples:

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

Les alias peuvent être configurés dans un fichier .bash_aliases appelé à partir de .bashrc avec: # définitions d'alias. if [-f ~ / .bash_aliases]; puis . ~ / .bash_aliases fi

Il y a de fortes chances que vous ayez déjà ce code, il vous suffit donc de créer votre propre fichier .bash_aliases.

Ces deux options fonctionnent sur un Mac et c'est une considération importante pour moi (un utilisateur principalement Ubuntu).

La plupart des gens utilisant tmux remappent les clés pour le rendre plus facile. Les liaisons par défaut ne sont tout simplement pas si bonnes. Voici mes paramètres:

$ 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

Enfin (pour fermer la boucle), voici mes paramètres .vimrc eux-mêmes que j'aime devoir rendre le shell plus facile à utiliser:

" 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()

Enfin, j'apporte quelques modifications à mon fichier .bashrc. Par exemple, shopt -s autocdlorsque je tape un nom de répertoire (qui existe), mes CD de shell dans ce répertoire immédiatement. Nifty! Voici donc mes modifications .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
la source
Belle réponse détaillée. J'utilise tmux depuis environ un an maintenant (et vi / vim depuis environ 25) mais j'ai ramassé certaines choses ici.
Dan
Grande, grande réponse pour un noob comme moi. La seule chose qui manque est les plugins vim que vous utilisez ... mais c'est une autre question pour un autre jour. :) Merci encore ... bien que cela me prenne une éternité pour le parcourir et tout essayer, je voulais vous donner la réponse acceptée.
Kevin Pauli
Bien sûr, je pense en fait que je n'utilise aucun plugin, mais je sais qu'il y en a beaucoup, y compris certains pour ma zone de rubis sur rails.
Michael Durrant
2
Une grande partie de ce que vous dites ici peut être utile, mais une chose est fausse: vim peut facilement diviser les volets à la fois horizontalement et verticalement.
dubiousjim
1
Mis à jour pour noter que l'écran peut maintenant effectuer des séparations horizontales et verticales.
Michael Durrant
6

J'utilise XMonad + tmux + Emacs pour une configuration similaire.

J'ai utilisé du ratpoison pendant un an dans le passé, mais XMonad s'est senti plus robuste. Je n'ai jamais eu aucun problème avec mes boîtiers 256 Mo, 512 Mo. Ratpoison a eu quelques problèmes de stabilité, mais c'est anecdotique et les choses ont peut-être changé depuis.

J'ai également utilisé l'écran GNU, mais tmux a certaines fonctionnalités que l'écran n'a pas.

Si vous connaissez déjà vim, vous feriez mieux de ne pas apprendre un nouvel outil. Si vous ne le faites pas, Emacs peut utiliser plusieurs shells ( C-u M-x shell), utiliser votre shell préféré ( M-x term), vous pouvez écrire, compiler et déboguer vos programmes, lire vos mails, sortir en IRC, lire les pages web / info / man, exécuter la plupart des REPL shells (par exemple M-x run-python), utilisez git / hg / svn à l'intérieur, éditez les fichiers distants avec TRAMP, utilisez dired pour faire presque toutes les opérations sur les fichiers, utilisez grep / find / ack à l'intérieur. Vous pouvez utiliser Emacs avec ou sans X. Vous n'avez pas besoin d'un multiplexeur de terminal comme screen ou tmux, mais je préfère exécuter emacs en tant que serveur et utiliser emacsclient à partir de tmux si vous l'exécutez à partir du shell.

Emre Sahin
la source
Je suggère d'utiliser Terminator! Mais c'est purement son choix!
Pranit Bauva
3
  • solution sans X du tout: framebuffer + console Linux + écran GNU + vim + w3m
  • solution avec X mais sans environnement de bureau: dwm + urxvt + écran GNU + vim + w3m + surf

dwm utilise seulement quelques centaines de Ko de mémoire, piloté par clavier, mais vous pouvez également utiliser la souris si vous le souhaitez. Consultez http://suckless.org pour des outils plus simples mais puissants.

Jing
la source
2

Pour plusieurs shells avec une navigation au clavier facile entre eux, vous voudrez peut-être regarder dans l' écran GNU ou byobu (qui est une amélioration de celui-ci).


la source
2

J'ai entrepris une entreprise similaire il y a quelques mois, abandonnant ma souris et explorant une multitude de configurations et de gestionnaires de fenêtres. Il semble que l'on vous ait déjà proposé de nombreuses suggestions utiles, mais je pensais que quelques centimes supplémentaires ne pouvaient pas faire de mal. Voici mes deux:

Jetez un œil au gestionnaire de fenêtres i3. Il est léger, avec une configuration simple et ne nécessite pas de recompilation après avoir modifié la configuration. La fonctionnalité de tuilage et les espaces de travail étiquetés signifient pas de souris et des possibilités infinies basées sur les préférences et l'espace d'écran. Les programmes peuvent être attribués à des balises et les clés peuvent être liées à presque tout. i3status ou conky sont facilement canalisés vers i3 pour les informations système. Installez dmenu et débranchez votre souris.

Essayez une distribution légère. Arch, Gentoo et Slackware offrent tous des options différentes pour configurer un environnement lumineux. Commencez petit et faites attention aux dépendances. Installez uniquement ce dont vous avez besoin et apprenez à le configurer correctement. Ne démarrez pas X au démarrage. Apprenez à utiliser tous les outils à vos frais. Vim est une bête. Si vous le connaissez déjà, utilisez-le. Sinon, apprenez-le. Faites attention aux détails. Découvrez ce que vous avez sur votre système et pourquoi il est là.

marquezc329
la source
Appuyant l'approche "light distro". Cela vous oblige vraiment à vous salir les mains, même s'ils vous le présentent commande par commande (le manuel d'installation Gentoo est excellent), car chaque système est différent. L'installation initiale ne vous donne même pas X, donc vous êtes coincé sur la ligne de commande.
ND Geek
1

J'ai eu un désir similaire il y a environ six mois. Principalement parce que je travaillais via SSH toute la journée. Comme cela a déjà été suggéré, utilisez l'écran GNU. C'est assez terrible (à mon humble avis) juste après l'avoir installé. Pourtant! Il est hautement personnalisable via le fichier .screenrc. Il existe de nombreux didacticiels en ligne qui fournissent du code que vous pouvez couper et coller pour l'obtenir comme vous le souhaitez.

Je suis allé jusqu'à rassembler quelques scripts pour mettre en place un tel environnement - MALiCE - «My Awesome Linux Coding Environment». Son disponible sur Github ici:

Malice

Cela documente également de nombreux raccourcis clavier ainsi que des exemples de fichiers .muttrc et .screenrc - qui sont configurés pour fonctionner avec des choses comme gmail.

Notez que ce n'est pas parfait, mais cela peut vous faire économiser du temps et des efforts pour jeter un œil à certains des fichiers de configuration et des scripts. Il y a un fort biais vim.

Je recommanderais également des programmes tels que cmus (lecteur multimédia à base de texte - assez bon) et mutt (client de messagerie - à nouveau configuré via le fichier texte .muttrc). Il existe également des clients IRC basés sur du texte et croyez-le ou non, des décodeurs vidéo basés sur du texte qui transformeront la vidéo en ASCII - un peu extrême mais chacun à leur façon.

Si vous ne voulez pas du tout de bureau, il existe un certain nombre d'options. Par exemple, vous pouvez installer slackware qui, si je me souviens bien, démarre sur une interface de ligne de commande. Vous devez vous mettre en quatre pour démarrer l'interface graphique.

Rui F Ribeiro
la source
Nous pourrions ajouter le elinksnavigateur Web à cette liste de bons utilitaires textuels.
Stéphane Chazelas
Comment se compare-t-il aux autres navigateurs Web à base de texte? Je ne pourrais jamais m'habituer à surfer sur le Web à partir de la ligne de commande: p
0

La clé de tout cela n'est pas la distribution, mais les outils. Arrêtez simplement d'utiliser les outils GUI et ajustez les outils CLI pour qu'ils ressemblent et se comportent exactement comme vous le souhaitez. Une façon consiste à le modifier ~/.Xresources, puis à le charger avec xrdbin ~/.xinitrc. Là, vous pouvez également démarrer un tas d'applications que vous utilisez toujours.

Évidemment, vous avez besoin d'un bon shell: je dirais zsh. Vous devrez travailler en profondeur ~/.zshrc. (Mais bash fonctionnerait aussi, bien sûr. Alors, ce ~/.bashrcserait l'endroit.)

Deuxièmement, un éditeur. Emacs ou vim, selon celui que vous utilisez actuellement. Un éditeur moins avancé (par exemple, nano) ne fera pas l'affaire. Comme avec le shell, vous feriez beaucoup de travail sur le ~/.emacsou les fichiers init correspondants.

Vous devez incorporer autant que possible dans votre éditeur de texte. Je vais donner quelques exemples du monde Emacs, simplement parce que je suis un utilisateur Emacs. Pour le courrier, rmail. Pour la gestion des fichiers, dired. Pour la navigation sur le Web, W3M. Pour les nouvelles, gnus (bien que je ne l'utilise pas). Pour les pages de manuel, M-x man. Etc.

La raison pour laquelle vous feriez cela et n'utilisez pas d'autres applications CLI (par exemple, uniquement manpour les pages de manuel, lynx pour la navigation, etc.) est:

1) le niveau d'intégration (tuer, tirer, créer des raccourcis; tout en un clin d'œil ...)

2) les raccourcis clavier pour naviguer dans le curseur, rechercher, etc. (c'est-à-dire votre mémoire musculaire)

Quant à X, vous n'avez pas besoin de l'abandonner. Ce n'est pas parce que vous voulez tout dans CLI que vous ne voulez pas du tout de GFX (ou - au moins, je veux seulement CLI et GFX). Par exemple, bien que vous modifiiez ou convertissiez des images avec (CLI), vous souhaiterez toujours les afficher pour vérifier le résultat (par exemple, dans gliv; désactivez simplement la barre de menus pour ne pas être tenté d'utiliser la souris). Un autre exemple est les documents LaTeX et PDF.

Quant au terminal, la plupart des gens diraient screen ou tmux mais vous pouvez aussi utiliser les terminaux virtuels Linux (la console ou ttys). Dans X, urxvt a une extension Perl qui active les onglets. Pour ceux (les ttys et urxvt), vous pouvez configurer une interface uniforme, par exemple Alt-J / K pour basculer entre les onglets, vous n'avez donc pas besoin d'atteindre les touches fléchées (ou quoi que ce soit par défaut).

Bonne chance :) N'hésitez pas à m'envoyer quelques conseils par vous-même lorsque vous avez terminé (ou presque là ... vous n'avez jamais terminé), car je suis sur la même voie que vous.

Emanuel Berg
la source