Shell

linux中超輕量級基於文本的程式環境的建議設置

  • April 6, 2019

我正在尋找針對我的特定需求的設置建議。自從大學以來,我沒有做過太多的 linux 並且想重新回到它作為一種愛好。我有一些不太強大的硬體(512 MB 記憶體,單核)。我想通過基於文本的 shell 和編輯器(例如 vim)來完成所有工作。我的目標是永遠不要觸摸滑鼠。

我需要能夠同時打開多個 shell,一個執行 Web 伺服器,一個執行 vim,一個執行我的應用程序建構管道,另一個用於臨時 shell 命令,例如 wget、grepping 和 untarring 等。我需要能夠使用鍵盤快速打開新外殼並在外殼之間切換。

但即使我想要多個 shell,我也不想要圖形桌面環境。我不想被誘惑使用滑鼠。我的部分目的是強迫自己學習執行各種任務的命令行方式。

我還希望能夠利用我的大型監視器,執行 vim 並顯示幾百列。

這可能嗎?

在我意識到我肯定有一個建議給你之前,我仔細閱讀了你的問題幾次: vim with tmux: http://tmux.sourceforge.net/

tmux 是一個螢幕“多路復用器”,可讓您在“1 以內”擁有多個視窗和窗格

它是古老的“screen”程序的繼任者,長期以來一直是許多 cli 編碼器的主要內容。與 vim 相比,它最初的獲勝功能之一是能夠垂直和水平拆分視窗。然而螢幕已經向前發展,現在也可以做到這一點。

例子:

在此處輸入圖像描述

我推薦的另一部分設置是一組很好的別名。這些將使您的打字和互動更加輕鬆快捷

我最喜歡的一些在這裡作為範例顯示:

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

別名可以在從 .bashrc 呼叫的 .bash_aliases 文件中設置:# 別名定義。如果

$$ -f ~/.bash_aliases $$; 然後 。~/.bash_aliases fi 您可能已經擁有該程式碼,因此只需您自己的 .bash_aliases 文件。

這兩個選項都適用於 Mac,這對我自己(主要是 Ubuntu 使用者)來說是一個重要的考慮因素。

大多數使用 tmux 的人重新映射鍵以使其更容易。預設綁定不是那麼好。這是我的設置:

$ 貓 ~/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

最後(結束循環),這是我的 .vimrc 設置本身,我喜歡讓 shell 更易於使用:

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

最後,我對我的 .bashrc 文件進行了一些更改,例如,shopt -s autocd當我輸入一個目錄名稱(存在)時,我的 shell cd 立即進入該目錄。漂亮!所以這是我的 .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

我正在使用 XMonad + tmux + Emacs 進行類似的設置。

我在過去一年使用了鼠毒,但 XMonad 感覺更強大。在我的 256MB、512MB 盒子裡,我從來沒有遇到過任何問題。Ratpoison 有一些穩定性問題,但這是軼事,從那時起情況可能會發生變化。

我也使用了 GNU screen,但是 tmux 有一些 screen 沒有的功能。

如果你已經了解 vim,最好不要學習新工具。如果你不這樣做,Emacs 可以使用多個 shell ( C-u M-x shell),使用你最喜歡的 shell ( M-x term),你可以編寫、編譯和調試你的程序,閱讀你的郵件,在 IRC 中閒逛,閱讀 web/info/man pages,執行大多數 REPL外殼(例如M-x run-python),在其中使用 git/hg/svn,使用 TRAMP 編輯遠端文件,使用 dired 執行幾乎所有文件操作,在其中使用 grep/find/ack。您可以使用帶或不帶 X 的 Emacs。您不需要像 screen 或 tmux 這樣的終端多路復用器,但我更喜歡將 emacs 作為伺服器執行,如果從 shell 執行它,則使用 tmux 中的 emacsclient。

引用自:https://unix.stackexchange.com/questions/56386