Installazione consigliata per un ambiente di programmazione basato su testo ultraleggero in Linux


14

Sto cercando suggerimenti per una configurazione per le mie esigenze particolari. Non ho fatto molto Linux dal college e voglio tornarci come hobby. Ho un hardware non troppo potente (512 MB di RAM, single core). Voglio fare tutto tramite shell ed editor basati su testo, come vim. Il mio obiettivo è non toccare mai il mouse.

Ho bisogno della possibilità di avere più shell aperte contemporaneamente, una che esegue un web server, una che esegue vim, una che esegue la mia pipeline di creazione dell'applicazione, un'altra per comandi shell ad hoc come wget, grepping e untarring, ecc. essere in grado di aprire nuove shell e passare rapidamente da una shell all'altra con la tastiera.

Ma anche se voglio più shell, non voglio un ambiente desktop grafico. Non voglio mai essere tentato di usare il mouse; parte del mio scopo è costringermi ad imparare il modo da riga di comando di svolgere vari compiti.

Voglio anche essere in grado di sfruttare il mio grande monitor, eseguendo VIM con un paio di centinaia di colonne visualizzate.

È possibile?


1
Dai un'occhiata a dvtm ... Puoi anche combinarlo con tmux o schermo.
Jasonwryan,

1
Questa domanda potrebbe essere più adatta come wiki della comunità.
jw013,

Risposte:


5

Ho letto diverse volte le tue domande prima di rendermi conto che ho sicuramente una raccomandazione per te: vim con tmux: http://tmux.sourceforge.net/

tmux è uno schermo 'multiplexor' che ti permette di avere diverse finestre e riquadri 'entro 1'

È il successore del venerabile programma 'schermo', a lungo un punto fermo di molti programmatori di cli. Una delle sue caratteristiche originali vincenti rispetto a vim era la possibilità di dividere le finestre in verticale e in orizzontale. Tuttavia lo schermo si è spostato in avanti e ora può farlo anche questo.

Esempio:

inserisci qui la descrizione dell'immagine

Un'altra parte dell'installazione che consiglierei è una buona serie di alias. Ciò renderà la tua digitazione e interazione molto più semplice e veloce

Alcuni dei miei preferiti sono mostrati qui come esempi:

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

Gli alias possono essere impostati in un file .bash_aliases che viene chiamato da .bashrc con: # Definizioni alias. if [-f ~ / .bash_aliases]; poi . ~ / .bash_aliases fi

È probabile che tu abbia già quel codice, quindi solo il tuo file .bash_aliases.

Entrambe queste opzioni funzionano su un Mac e questa è una considerazione importante per me (un utente per lo più Ubuntu).

La maggior parte delle persone che usano tmux rimappano i tasti per renderlo più semplice. I binding predefiniti non sono poi così buoni. Ecco le mie impostazioni:

$ 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

Infine (per chiudere il ciclo), ecco le mie stesse impostazioni .vimrc che mi piace dover rendere la shell più facile da usare:

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

Infine apporto alcune modifiche al mio file .bashrc Ad esempio con shopt -s autocdquando digito un nome di directory (che esiste) il mio cd di shell si trova immediatamente in quella directory. Nifty! Quindi ecco le mie modifiche .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

Bella risposta dettagliata. Sto usando tmux da un anno ormai (e vi / vim per circa 25) ma ho raccolto alcune cose qui.
Dan,

Ottima, ottima risposta per un noob come me. L'unica cosa che manca è quali plugin vim usi ... ma questa è un'altra domanda per un altro giorno. :) Grazie ancora ... anche se mi ci vorrà un'eternità per affrontarlo e provare tutto, volevo andare avanti per darti la risposta accettata.
Kevin Pauli,

Certo, in realtà penso di non utilizzare alcun plug-in, ma so che ce ne sono molti disponibili tra cui alcuni per la mia area di rubino su binari.
Michael Durrant,

2
Gran parte di ciò che dici qui può essere utile, ma una cosa è spenta: vim può facilmente dividere i riquadri sia in orizzontale che in verticale.
dubiousjim

1
Aggiornato per notare che ora lo schermo può eseguire divisioni orizzontali e verticali.
Michael Durrant,

6

Sto usando XMonad + tmux + Emacs per una configurazione simile.

Ho usato ratpoison per un anno in passato, ma XMonad mi è sembrato più robusto. Non ho mai avuto problemi con i miei box da 256 MB e 512 MB. Ratpoison ha avuto alcuni problemi di stabilità, ma questo è aneddotico e le cose potrebbero essere cambiate da allora.

Ho anche usato lo schermo GNU ma tmux ha alcune caratteristiche che lo schermo non ha.

Se conosci già vim, è meglio non imparare un nuovo strumento. In caso contrario, Emacs può utilizzare più shell ( C-u M-x shell), utilizzare la shell preferita ( M-x term), è possibile scrivere, compilare ed eseguire il debug dei programmi, leggere i messaggi di posta elettronica, ritrovarsi in IRC, leggere pagine web / info / man, eseguire la maggior parte REPL shell (es. M-x run-python), usa git / hg / svn al suo interno, modifica i file remoti con TRAMP, usa dired per fare quasi tutte le operazioni sui file, usa grep / find / ack al suo interno. Puoi usare Emacs con o senza X. Non hai bisogno di un multiplexer terminale come screen o tmux, ma preferisco eseguire emacs come server e usare emacsclient da tmux se lo esegui dalla shell.


Vorrei suggerire di utilizzare Terminator! Ma è una scelta puramente personale!
Pranit Bauva,

3
  • soluzione senza X: framebuffer + console Linux + schermo GNU + vim + w3m
  • soluzione con X ma nessun ambiente desktop: dwm + urxvt + schermo GNU + vim + w3m + surf

dwm utilizza solo poche centinaia di KB di memoria, gestita da tastiera, ma se lo desideri puoi usare anche il mouse. Controlla http://suckless.org per strumenti più semplici ma potenti.


2

Per più shell con una facile navigazione da tastiera tra di loro, potresti voler esaminare GNU Screen o byobu (che è un miglioramento di esso).


2

Ho intrapreso un simile tentativo un paio di mesi fa, abbandonando il mouse ed esplorando una moltitudine di allestimenti e gestori di finestre. Sembra che ti siano già stati offerti molti suggerimenti utili, ma ho pensato che un paio di centesimi in più non potevano far male. Ecco i miei due:

Dai un'occhiata a i3 window manager. È leggero, con una configurazione semplice e non richiede una ricompilazione dopo aver modificato la configurazione. Funzionalità di affiancamento e aree di lavoro con tag non significano mouse e infinite possibilità in base alle preferenze e allo spazio dello schermo. I programmi possono essere assegnati a tag e i tasti possono essere associati a qualsiasi cosa. i3status o conky possono essere facilmente reindirizzati a i3 per informazioni di sistema. Installa dmenu e scollega il mouse.

Prova una distro leggera. Arch, Gentoo e Slackware offrono tutti diverse opzioni per la creazione di un ambiente leggero. Inizia in piccolo e presta attenzione alle dipendenze. Installa solo ciò di cui hai bisogno e impara a configurarlo correttamente. Non avviare X all'avvio. Impara a utilizzare tutti gli strumenti a tue spese. Vim è una bestia. Se lo conosci già, usalo. In caso contrario, imparalo. Prestare attenzione ai dettagli. Scopri cosa hai sul tuo sistema e perché è lì.


Secondo l'approccio "light distro". Ti costringe davvero a sporcarti le mani, anche se te lo presentano comando per comando (il Manuale di installazione di Gentoo è eccellente), perché ogni sistema è diverso. L'installazione iniziale non ti dà nemmeno X, quindi sei bloccato sulla riga di comando.
ND Geek,

1

Avevo un desiderio simile circa sei mesi fa. Principalmente perché stavo lavorando via SSH tutto il giorno. Come è già stato suggerito, utilizzare lo schermo GNU. È piuttosto terribile (IMHO) subito dopo averlo installato. Tuttavia! È altamente personalizzabile tramite il file .screenrc. Esistono molti tutorial online che forniscono il codice che puoi tagliare e incollare per ottenerlo come preferisci.

Sono arrivato al punto di mettere insieme alcuni script per impostare un tale ambiente - MALiCE - "My Awesome Linux Coding Environment". È disponibile su Github qui:

Malizia

Questo documenta anche molte scorciatoie da tastiera e un esempio di file .muttrc e .screenrc - che sono configurati per funzionare con cose come Gmail.

Nota che non è perfetto, ma potrebbe farti risparmiare un po 'di tempo e sforzi per dare un'occhiata ad alcuni dei file e degli script di configurazione. C'è un forte pregiudizio.

Consiglierei anche programmi come cmus (lettore multimediale basato su testo - abbastanza buono) e mutt (client di posta elettronica - configurato nuovamente tramite file di testo .muttrc). Ci sono anche client IRC basati su testo e che ci crediate o no, decodificatori video basati su testo che trasformeranno il video in ASCII - un po 'estremo ma ognuno a sé stante.

Se non vuoi affatto un desktop, allora ci sono molte opzioni. Ad esempio, potresti installare slackware, che se ricordo mi avvia correttamente a un'interfaccia a riga di comando. Devi fare di tutto per avviare la GUI.


Potremmo aggiungere il elinksbrowser Web a quell'elenco di buone utilità basate su testo.
Stéphane Chazelas,

Come si confronta con altri browser Web testuali? Non potrei mai abituarmi alla navigazione web dalla riga di comando: p


0

La chiave di ciò non è la distribuzione, ma gli strumenti. Basta smettere di usare gli strumenti della GUI e modificare gli strumenti della CLI per apparire e comportarsi esattamente come si desidera. Un modo è modificare ~/.Xresources, quindi caricarlo con xrdbin ~/.xinitrc. Lì, potresti anche avviare un sacco di applicazioni che usi sempre.

Ovviamente hai bisogno di una buona shell: direi zsh. Dovrai lavorare molto su ~/.zshrc. (Ma bash funzionerebbe anche lui, ovviamente. Allora, ~/.bashrcsarebbe il posto giusto.)

Secondo, un editore. Emacs o vim, a seconda di quale attualmente usi. Un editor meno avanzato (ad esempio, nano) non lo farà. Come con la shell, faresti molto lavoro ~/.emacso i file init corrispondenti.

Devi incorporare il più possibile nel tuo editor di testo. Darò alcuni esempi dal mondo Emacs, semplicemente perché sono un utente Emacs. Per posta, rmail. Per la gestione dei file, diretto. Per la navigazione web, W3M. Per notizie, gnus (anche se non lo uso). Per le pagine man,M-x man . E così via.

Il motivo per cui dovresti farlo e non utilizzare altre applicazioni CLI (ad es. Solo manper le pagine man, lynx per la navigazione, ecc.) È:

1) il livello di integrazione (kill, yank, scorciatoie; tutto in un batter d'occhio ...)

2) le scorciatoie da tastiera per la navigazione del cursore, la ricerca, ecc. (Ovvero la memoria muscolare)

Per quanto riguarda X, non è necessario abbandonarlo. Solo perché vuoi tutto nella CLI non significa che non vuoi affatto GFX (o - almeno, voglio solo CLI, e GFX). Ad esempio, anche se modifichi le immagini con (CLI) mogrifica o converti, vorresti comunque visualizzarle per controllare il risultato (ad esempio, in gliv; disabilita semplicemente la barra dei menu per non essere tentato di usare il mouse). Un altro esempio sono i documenti LaTeX e PDF.

Per quanto riguarda il terminale, la maggior parte delle persone direbbe schermo o tmux ma potresti anche usare i terminali virtuali di Linux (la console o ttys). In X, urxvt ha un'estensione Perl che abilita le schede. Per quelli (ttys e urxvt) potresti impostare un'interfaccia uniforme, ad esempio Alt-J / K per passare da una scheda all'altra, quindi non devi cercare i tasti freccia (o qualunque cosa sia di default).

Buona fortuna :) Sentiti libero di inviarmi alcuni suggerimenti per te quando hai finito (o quasi lì ... non hai mai finito), dato che sono sulla tua stessa traccia.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.