Linux 中超轻量级基于文本的编程环境的建议设置

Linux 中超轻量级基于文本的编程环境的建议设置

我正在寻找适合我的特殊需求的设置建议。自从大学毕业以来,我就没有做过太多 Linux 工作,并且想重新把它作为一种爱好。我有一些不太强大的硬件(512 MB 内存,单核)。我想通过基于文本的 shell 和编辑器(例如 vim)来完成所有操作。我的目标是永远不碰鼠标。

我需要能够同时打开多个 shell,一个运行 Web 服务器,一个运行 vim,一个运行我的应用程序构建管道,另一个用于临时 shell 命令,例如 wget、grepping 和 untarring 等。我需要能够使用键盘打开新的 shell 并在 shell 之间快速切换。

但即使我想要多个 shell,我还是这么做不是想要一个图形桌面环境。我不想被诱惑使用鼠标;我不想使用鼠标。我的部分目的是强迫自己学习执行各种任务的命令行方式。

我还希望能够利用我的大显示器,运行 vim 并显示数百列。

这可能吗?

答案1

我读了好几遍你的问题后才意识到我肯定有一个建议给你: vim 与 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 ;)

别名可以在 .bash_aliases 文件中设置,该文件从 .bashrc 调用: # 别名定义。如果 [ -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

答案2

我使用 XMonad + tmux + Emacs 进行类似的设置。

我过去使用了ratpoison一年,但XMonad感觉更强大。我的 256MB、512MB 盒子从来没有遇到过任何问题。 Ratpoison 存在一些稳定性问题,但这是轶事,从那以后情况可能会发生变化。

我也使用过 GNU screen,但 tmux 有一些 screen 没有的功能。

如果你已经了解 vim,你最好不要学习新工具。如果你不这样做,Emacs 可以使用多个 shell ( C-u M-x shell),使用你最喜欢的 shell ( M-x term),你可以编写、编译和调试你的程序,阅读你的邮件,在 IRC 中闲逛,阅读 web/info/man 页面,运行大多数 REPL shell(例如M-x run-python),在其中使用 git/hg/svn,使用 TRAMP 编辑远程文件,使用 dired 执行几乎所有文件操作,在其中使用 grep/find/ack。您可以使用带或不带 X 的 Emacs。您不需要像 screen 或 tmux 这样的终端多路复用器,但我更喜欢将 emacs 作为服务器运行,如果从 shell 运行它,则使用 tmux 中的 emacsclient。

答案3

  • 根本没有X的解决方案:framebuffer + Linux console + GNU screen + vim + w3m
  • 有X但没有桌面环境的解决方案:dwm + urxvt + GNU screen + vim + w3m + surf

dwm 仅使用几百 kB 内存,由键盘驱动,但如果您愿意,也可以使用鼠标。查看http://suckless.org以获得更简单但更强大的工具。

答案4

几个月前,我进行了类似的尝试,放弃了鼠标并探索了多种设置和窗口管理器。看起来已经向您提供了很多有用的建议,但我认为多花几分钱也没什么坏处。这是我的两个:

看一下 i3 窗口管理器。它很轻,配置简单,并且在更改配置后不需要重新编译。平铺功能和标记工作区意味着无需鼠标,并且可以根据偏好和屏幕空间实现无限的可能性。程序可以分配给标签,密钥可以绑定到几乎任何东西。 i3status 或 conky 可以轻松通过管道传输到 i3 以获取系统信息。安装 dmenu 并拔掉鼠标。

尝试一个轻量级发行版。 Arch、Gentoo 和 Slackware 都提供了不同的选项来设置光照环境。从小事做起,注意依赖性。仅安装您需要的内容并学习如何正确配置它。不要在启动时启动 X。自费学习使用所有工具。 Vim 是一头野兽。如果您已经知道它,请使用它。如果不会,那就学习一下吧。注意细节。了解您的系统上有什么以及为什么它在那里。

相关内容