Vorgeschlagenes Setup für eine ultraleichte textbasierte Programmierumgebung unter Linux

14

Ich suche nach Vorschlägen für ein Setup für meine speziellen Bedürfnisse. Ich habe seit dem College nicht mehr viel Linux gemacht und möchte es als Hobby wieder aufnehmen. Ich habe einige nicht zu leistungsfähige Hardware (512 MB RAM, Single Core). Ich möchte alles über textbasierte Shells und Editoren wie vim erledigen. Mein Ziel ist es, niemals die Maus zu berühren.

Ich brauche die Möglichkeit, mehrere Shells gleichzeitig zu öffnen, eine, auf der ein Webserver ausgeführt wird, eine, auf der vim ausgeführt wird, eine, auf der meine Anwendungserstellungspipeline ausgeführt wird, eine andere, die Ad-hoc-Shell-Befehle wie wget, grepping und uncarring usw. unterstützt in der Lage sein, neue Shells zu öffnen und mit der Tastatur schnell zwischen Shells zu wechseln.

Aber obwohl ich mehrere Shells haben möchte , möchte ich keine grafische Desktop-Umgebung. Ich möchte nie versucht sein, die Maus zu benutzen. Teil meines Ziels ist es, mich zu zwingen, die Befehlszeilenmethode für verschiedene Aufgaben zu erlernen.

Ich möchte auch in der Lage sein, meinen großen Monitor zu nutzen, auf dem ein paar hundert Spalten angezeigt werden.

Ist das möglich?

Kevin Pauli
quelle
1
Hier finden Sie aktuelle dvtm ... Sie auch mit tmux oder Bildschirm kombinieren könnte.
Jasonwryan
1
Diese Frage eignet sich möglicherweise besser als Community-Wiki.
JW013

Antworten:

5

Ich habe Ihre Fragen mehrmals durchgelesen, bevor mir klar wurde, dass ich definitiv eine Empfehlung für Sie habe: vim with tmux: http://tmux.sourceforge.net/

tmux ist ein 'Multiplexer'-Bildschirm, mit dem Sie mehrere Fenster und Fensterbereiche' innerhalb von 1 'haben können.

Es ist ein Nachfolger des ehrwürdigen "Bildschirm" -Programms, das seit langem ein Grundnahrungsmittel vieler CLI-Programmierer ist. Eines der ursprünglichen Erfolgsmerkmale von vim war die Möglichkeit, Fenster sowohl vertikal als auch horizontal zu teilen. Der Bildschirm hat sich jedoch nach vorne bewegt und kann dies jetzt auch.

Beispiel:

Bildbeschreibung hier eingeben

Ein weiterer Teil des Setups, den ich empfehlen würde, ist ein guter Satz von Aliasen. Dies erleichtert und beschleunigt die Eingabe und Interaktion erheblich

Einige meiner Favoriten werden hier als Beispiele gezeigt:

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

Aliase können in einer .bash_aliases-Datei eingerichtet werden, die von .bashrc mit folgenden Angaben aufgerufen wird: # Aliasdefinitionen. if [-f ~ / .bash_aliases]; dann . ~ / .bash_aliases fi

Möglicherweise haben Sie diesen Code bereits, also nur Ihre eigene .bash_aliases-Datei.

Beide Optionen funktionieren auf einem Mac und das ist ein wichtiger Gesichtspunkt für mich (ein größtenteils Ubuntu-Benutzer).

Die meisten Leute, die tmux benutzen, ordnen die Tasten neu zu, um es einfacher zu machen. Die Standardbindungen sind einfach nicht so gut. Hier sind meine Einstellungen:

$ 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

Zum Schluss (um die Schleife zu schließen) sind hier meine .vimrc-Einstellungen selbst, die ich mag, um die Shell benutzerfreundlicher zu machen:

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

Schließlich nehme ich ein paar Änderungen an meiner .bashrc-Datei vor. shopt -s autocdWenn ich beispielsweise einen Verzeichnisnamen eingebe (der existiert), werden meine Shell-CDs sofort in dieses Verzeichnis kopiert. Raffiniert! Hier sind meine .bashrc-Änderungen:

# 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
quelle
Schöne ausführliche Antwort. Ich benutze tmux seit ungefähr einem Jahr (und vi / vim seit ungefähr 25 Jahren), aber ich habe einige Dinge hier aufgegriffen.
Dan
Großartige Antwort für einen Noob wie mich. Es fehlt nur noch, welche VIM-Plugins Sie verwenden ... aber das ist eine andere Frage für einen anderen Tag. :) Nochmals vielen Dank ... obwohl ich ewig brauchen werde, um alles durchzuarbeiten und auszuprobieren, wollte ich Ihnen die akzeptierte Antwort geben.
Kevin Pauli
Klar, ich denke tatsächlich, dass ich keine Plugins verwende, aber ich weiß, dass es viele gibt, einschließlich einiger für meinen Ruby on Rails-Bereich.
Michael Durrant
2
Vieles von dem, was Sie hier sagen, mag nützlich sein, aber eines ist falsch: vim kann Scheiben leicht sowohl horizontal als auch vertikal teilen.
dubiousjim
1
Aktualisiert, um zu beachten, dass der Bildschirm jetzt horizontal und vertikal aufgeteilt werden kann.
Michael Durrant
6

Ich verwende XMonad + tmux + Emacs für ein ähnliches Setup.

Ich habe in der Vergangenheit ein Jahr lang Ratpoison verwendet, aber XMonad fühlte sich robuster an. Ich hatte nie Probleme mit meinen 256MB, 512MB Boxen. Ratpoison hatte einige Stabilitätsprobleme, aber das ist anekdotisch und die Dinge könnten sich seitdem geändert haben.

Ich habe auch GNU-Bildschirm verwendet, aber tmux hat einige Funktionen, die der Bildschirm nicht hat.

Wenn Sie vim bereits kennen, sollten Sie kein neues Tool lernen. Wenn Sie dies nicht tun, kann Emacs mehrere Shells ( C-u M-x shell) verwenden, Ihre Lieblingsshell ( M-x term) verwenden, Sie können Ihre Programme schreiben, kompilieren und debuggen, Ihre Mails lesen, im IRC rumhängen, Web- / Info- / Man-Seiten lesen und die meisten REPL ausführen shells (zB M-x run-python), benutze git / hg / svn, bearbeite entfernte Dateien mit TRAMP, benutze dired um fast alle Dateioperationen durchzuführen, benutze grep / find / ack. Sie können Emacs mit oder ohne X verwenden. Sie benötigen keinen Terminal-Multiplexer wie screen oder tmux, aber ich bevorzuge es, emacs als Server auszuführen und emacsclient von tmux zu verwenden, wenn Sie es von der Shell ausführen.

Emre Sahin
quelle
Ich würde vorschlagen, Terminator zu verwenden! Aber es ist nur eine Wahl!
Pranit Bauva
3
  • Lösung ohne X: Framebuffer + Linux-Konsole + GNU-Bildschirm + vim + w3m
  • Lösung mit X, aber ohne Desktop-Umgebung: dwm + urxvt + GNU-Bildschirm + vim + w3m + surf

dwm benötigt nur ein paar hundert kB Speicher (tastaturgesteuert), aber Sie können auch die Maus verwenden, wenn Sie möchten. Unter http://suckless.org finden Sie einfachere und leistungsfähigere Tools.

Jing
quelle
2

Für mehrere Shells mit einfacher Tastaturnavigation können Sie sich GNU Screen oder byobu (eine Erweiterung davon) ansehen .


quelle
2

Ich habe vor ein paar Monaten ein ähnliches Unterfangen unternommen, meine Maus verlassen und eine Vielzahl von Setups und Fenstermanagern erkundet. Anscheinend wurden Ihnen bereits viele hilfreiche Vorschläge unterbreitet, aber ich dachte, ein paar Cent mehr könnten nicht schaden. Hier sind meine beiden:

Schauen Sie sich den i3 Window Manager an. Es ist leicht, mit einfacher Konfiguration und erfordert keine Neukompilierung, nachdem die Konfiguration geändert wurde. Kachelfunktionalität und gekennzeichnete Arbeitsbereiche bedeuten keine Maus und endlose Möglichkeiten, je nach Vorlieben und Bildschirmgröße. Programme können Tags zugewiesen und Tasten an fast alles gebunden werden. i3status oder conky werden einfach an i3 weitergeleitet, um Systeminformationen zu erhalten. Installieren Sie das Menü und ziehen Sie den Netzstecker.

Versuchen Sie es mit einer leichten Distribution. Arch, Gentoo und Slackware bieten verschiedene Optionen zum Einrichten einer Lichtumgebung. Fangen Sie klein an und achten Sie auf Abhängigkeiten. Installieren Sie nur das, was Sie benötigen, und lernen Sie, es richtig zu konfigurieren. Starten Sie X nicht beim Booten. Lernen Sie, alle Tools auf Ihre Kosten zu nutzen. Vim ist ein Biest. Wenn Sie es bereits wissen, verwenden Sie es. Wenn nicht, lerne es. Achten Sie auf die Details. Erfahren Sie, was Sie auf Ihrem System haben und warum es dort ist.

marquezc329
quelle
Zweitens den "light distro" -Ansatz. Es zwingt Sie wirklich dazu, sich die Hände schmutzig zu machen, auch wenn sie befehlsweise für Sie ausgelegt sind (das Gentoo Installationshandbuch ist exzellent), da jedes System anders ist. Bei der Erstinstallation erhalten Sie nicht einmal X, sodass Sie in der Befehlszeile nicht weiterkommen.
ND Geek
1

Ich hatte vor ungefähr sechs Monaten einen ähnlichen Wunsch. In erster Linie, weil ich den ganzen Tag über über SSH gearbeitet habe. Verwenden Sie, wie bereits vorgeschlagen, den GNU-Bildschirm. Es ist ziemlich schrecklich (IMHO) direkt nach der Installation. Jedoch! Es ist sehr anpassbar über die .screenrc-Datei. Es gibt viele Online-Tutorials, die Code enthalten, den Sie ausschneiden und einfügen können, um ihn ganz nach Ihren Wünschen zu erhalten.

Ich ging so weit, ein paar Skripte zum Einrichten einer solchen Umgebung zusammenzustellen - MALiCE - 'My Awesome Linux Coding Environment'. Es ist hier auf Github erhältlich:

Bosheit

Dies dokumentiert auch eine Vielzahl von Tastaturkürzeln sowie ein Beispiel für Muttrc- und Screenrc-Dateien, die für die Arbeit mit Dingen wie Google Mail eingerichtet wurden.

Beachten Sie, dass es nicht perfekt ist, aber es kann Ihnen Zeit und Mühe ersparen, sich einige der Konfigurationsdateien und Skripte anzusehen. Es gibt eine starke Vim-Tendenz.

Ich würde auch Programme wie cmus (textbasierter Mediaplayer - ziemlich gut) und mutt (E-Mail-Client - erneut über die Textdatei .muttrc konfiguriert) empfehlen. Es gibt auch textbasierte IRC-Clients und ob Sie es glauben oder nicht, textbasierte Videodecoder, die Videos in ASCII verwandeln - ein bisschen extrem, aber für sich.

Wenn Sie überhaupt keinen Desktop möchten, gibt es eine Reihe von Optionen. Zum Beispiel könnten Sie Slackware installieren, die, wenn ich mich richtig erinnere, über eine Befehlszeilenschnittstelle startet. Sie müssen sich sehr viel Mühe geben, um die GUI zu starten.

Rui F Ribeiro
quelle
Wir könnten den elinksWebbrowser zu dieser Liste guter textbasierter Dienstprogramme hinzufügen .
Stéphane Chazelas
Wie ist der Vergleich mit anderen textbasierten Webbrowsern? Ich konnte mich nie daran gewöhnen, über die Befehlszeile im Internet zu surfen: p
0

Der Schlüssel dazu ist nicht die Distribution, sondern die Werkzeuge. Stoppen Sie einfach die Verwendung von GUI-Tools und optimieren Sie die CLI-Tools, damit sie genau so aussehen und sich so verhalten, wie Sie möchten. Eine Möglichkeit besteht darin, sie zu bearbeiten ~/.Xresourcesund dann mit xrdbin zu laden ~/.xinitrc. Dort können Sie auch eine Reihe von Anwendungen starten, die Sie immer verwenden.

Offensichtlich braucht man eine gute Muschel: Ich würde zsh sagen. Sie müssen ausgiebig arbeiten ~/.zshrc. (Aber bash würde natürlich auch funktionieren. Dann ~/.bashrcwäre es der richtige Ort.)

Zweitens ein Editor. Emacs oder vim, je nachdem was du gerade benutzt. Ein weniger fortgeschrittener Editor (z. B. Nano) reicht nicht aus. Wie bei der Shell würden Sie viel Arbeit an ~/.emacsoder an den entsprechenden Init-Dateien.

Sie müssen so viel wie möglich in Ihren Texteditor integrieren. Ich werde einige Beispiele aus der Emacs-Welt nennen, einfach weil ich ein Emacs-Benutzer bin. Für Mail, Mail. Für die Dateiverwaltung dired. Für das Surfen im Internet W3M. Für Nachrichten Gnus (obwohl ich es nicht benutze). Für Manpages M-x man. Und so weiter.

Der Grund, warum Sie dies tun und keine anderen CLI-Anwendungen verwenden (z. B. nur manfür Manpages, Lynx zum Browsen usw.), ist:

1) den Grad der Integration (töten, reißen, Verknüpfungen herstellen; alles im Handumdrehen ...)

2) die Tastaturkürzel zum Navigieren des Cursors, Suchen usw. (dh Ihr Muskelgedächtnis)

Was X betrifft, müssen Sie es nicht aufgeben. Nur weil Sie alles in CLI wollen, heißt das nicht, dass Sie GFX überhaupt nicht wollen (oder - zumindest, ich will nur CLI und GFX). Wenn Sie beispielsweise Bilder mit (CLI) mogrify oder convert ändern, möchten Sie sie dennoch anzeigen, um das Ergebnis zu überprüfen (z. B. in gliv; deaktivieren Sie einfach die Menüleiste, um nicht versucht zu sein, die Maus zu verwenden). Ein weiteres Beispiel sind LaTeX- und PDF-Dokumente.

Was das Terminal betrifft, würden die meisten Leute screen oder tmux sagen, aber Sie könnten auch die virtuellen Linux-Terminals (die Konsole oder ttys) verwenden. In X verfügt urxvt über eine Perl-Erweiterung, die Registerkarten aktiviert. Für diese (ttys und urxvt) können Sie eine einheitliche Benutzeroberfläche einrichten, z. B. Alt-J / K, um zwischen Registerkarten zu wechseln, sodass Sie nicht nach den Pfeiltasten greifen müssen (oder was auch immer die Standardeinstellung ist).

Viel Glück :) Wenn Sie fertig sind (oder fast fertig sind), können Sie mir gerne einige eigene Hinweise zukommen lassen, da ich auf dem gleichen Weg bin wie Sie.

Emanuel Berg
quelle