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


14

我正在寻找针对我的特定需求的安装建议。自从上大学以来,我并没有做太多的Linux,并且想重新回到它的爱好。我有一些功能不太强大的硬件(512 MB内存,单核)。我想通过基于文本的shell和编辑器(例如vim)来完成所有操作。我的目标是永远不要触摸鼠标。

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

但是,即使我需要多个外壳,也不需要图形桌面环境。我永远不想动动鼠标。我的目的之一是迫使自己学习执行各种任务的命令行方式。

我还希望能够利用大型监视器运行vim,并在其中浸入数百列。

这可能吗?


1
看看dvtm ...。您也可以将其与tmux或屏幕结合使用。
jasonwryan 2012年

1
这个问题可能更适合作为社区Wiki。
2012年

Answers:


5

在意识到我绝对有一个建议之前,我通读了几次您的问题: vim with tmux: http : //tmux.sourceforge.net/

tmux是一个屏幕“多路复用器”,可让您在“ 1之内”拥有多个窗口和窗格

它是古老的“屏幕”程序的继任者,长期以来是许多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设置,我希望自己使外壳更易于使用:

" 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

不错的详细答案。我已经使用tmux一年了(vi / vim大约25年),但是我在这里捡到了一些东西。
2012年

对于像我这样的菜鸟来说,很好,很好的答案。唯一缺少的是您使用了什么vim插件...但这是另一天的问题。:)再次感谢...尽管它将使我永远经历并尝试所有尝试,但我想继续给您接受的答案。
凯文·保利

当然,我确实认为我没有使用任何插件,但是我知道有很多可用的插件,其中包括一些适用于我的红宝石领域的插件。
Michael Durrant

2
您在这里所说的大部分内容可能都有用,但有一件事情是不对的:vim可以轻松地在水平和垂直方向拆分窗格。
dubiousjim

1
更新为注意屏幕现在可以进行水平和垂直拆分。
Michael Durrant 2015年

6

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

过去一年,我使用了杀人药,但XMonad感觉更强大。我的256MB,512MB盒内没有任何问题。鼠毒有一些稳定性问题,但这是轶事,此后事情可能会发生变化。

我还使用了GNU屏幕,但是tmux具有屏幕没有的一些功能。

如果您已经了解vim,则最好不要学习新工具。否则,Emacs可以使用多个外壳程序(C-u M-x shell),使用您喜欢的外壳程序(M-x term),您可以编写,编译和调试程序,阅读邮件,在hangout中进行IRC,阅读Web /信息/手册页,运行大多数REPL外壳程序(例如M-x run-python),在其中使用git / hg / svn,使用TRAMP编辑远程文件,使用Dired进行几乎所有文件操作,在其中使用grep / find / ack。您可以在带有或不带有X的情况下使用Emacs。不需要屏幕或tmux之类的终端多路复用器,但是我更喜欢将emacs作为服务器运行,如果从shell运行,则可以从tmux使用emacsclient。


我建议使用终结器!但这纯粹是您的选择!
Pranit Bauva

3
  • 根本没有X的解决方案:帧缓冲+ Linux控制台+ GNU屏幕+ vim + w3m
  • X但没有桌面环境的解决方案:dwm + urxvt + GNU屏幕+ vim + w3m +冲浪

dwm仅使用数百kB的内存(由键盘驱动),但是如果您愿意,也可以使用鼠标。检查http://suckless.org更多的简单而强大的工具。


2

对于多个外壳,它们之间具有轻松的键盘导航,您可能需要查看GNU Screenbyobu(它是对它的增强)。


2

几个月前,我进行了类似的尝试,放弃了鼠标,探索了许多设置和窗口管理器。似乎已经为您提供了许多有用的建议,但我认为可以多花几分钱。这是我的两个:

看一下i3窗口管理器。轻巧,配置简单,更改配置后无需重新编译。平铺功能和带标签的工作区意味着,根据偏好和屏幕空间,没有鼠标和无尽的可能性。可以将程序分配给标签,并且可以将键绑定到几乎任何东西。i3status或conky可以很容易地通过管道传输到i3以获得系统信息。安装dmenu并拔下鼠标。

尝试一个轻发行版。Arch,Gentoo和Slackware都提供了用于设置灯光环境的不同选项。从小处着手,并注意依赖关系。仅安装所需的组件,并学习正确配置它。不要在启动时启动X。学习自费使用所有工具。Vim是野兽。如果您已经知道,请使用它。如果没有,请学习。注意细节。了解您的系统上有什么以及为什么有它。


其次是“轻发行”方法。即使他们逐个命令为您布置(实际上是出色的《Gentoo安装手册》),它确实会迫使您弄脏手,因为每个系统都是不同的。初始安装甚至没有给您X,因此您被困在命令行中。
ND怪胎

1

大约六个月前,我也有类似的愿望。主要是因为我整天都在通过SSH工作。正如已经建议的那样,使用GNU屏幕。安装后,它非常糟糕(IMHO)。然而!可通过.screenrc文件高度自定义。有许多在线教程提供了您可以剪切和粘贴以获取所需代码的代码。

我甚至整理了一些脚本来建立这样的环境-MALiCE-“我的Awesome Linux编码环境”。它可以在Github上找到:

恶意

它还记录了许多键盘快捷键以及示例.muttrc和.screenrc文件-这些文件可与gmail之类的文件一起使用。

注意它并不完美,但是可以节省一些时间和精力来查看一些配置文件和脚本。Vim有很强的偏见。

我还建议使用诸如cmus(基于文本的媒体播放器-非常好)和mutt(电子邮件客户端-再次通过文本文件.muttrc配置)之类的程序。还有一些基于文本的IRC客户端,不管您信不信由你,基于文本的视频解码器会将视频转换为ASCII-有点极端,但每个都有自己的特点。

如果您根本不希望使用台式机,那么有很多选择。例如,您可以安装slackware,如果我记得正确的话,可以将其引导到命令行界面。您必须竭尽全力来启动GUI。


我们可以将elinksWeb浏览器添加到基于文本的良好实用程序列表中。
斯特凡Chazelas

与其他基于文本的Web浏览器相比如何?我从不习惯从命令行进行网络冲浪:p


0

关键不是分发,而是工具。只需停止使用GUI工具,并调整CLI工具以使其外观和行为完全符合您的期望即可。一种方法是编辑~/.Xresources,然后将其加载xrdb~/.xinitrc。在这里,您还可以启动一堆您一直使用的应用程序。

显然,您需要一个好的shell:我会说zsh。您将需要进行大量工作~/.zshrc。(但是bash当然也可以工作。然后,~/.bashrc就可以了。)

第二,编辑。Emacs或vim,取决于您当前使用的是哪个。较不高级的编辑器(例如,nano)则不会。与shell一样,您将在~/.emacs在相应的init文件。

您需要在文本编辑器中尽可能多地合并。我将给出Emacs世界中的一些示例,仅仅是因为我是Emacs用户。对于邮件,rmail。对于文件管理,很烦。对于Web浏览,请使用W3M。对于新闻,gnus(尽管我不使用它)。对于手册页,M-x man。等等。

您这样做而不使用其他CLI应用程序的原因(例如,仅man用于手册页,用于浏览的lynx等)是:

1)集成级别(杀死,拉扯,创建快捷方式;所有内容一瞬间...)

2)用于浏览光标,搜索等(例如,您的肌肉记忆)的键盘快捷方式

至于X,您不需要放弃它。仅仅因为您想要CLI中的所有内容并不意味着您根本不需要GFX(或者-至少,我只希望使用CLI,并且 GFX)。例如,尽管您使用(CLI)迁移或转换来修改图像,但您仍要显示该图像以检查结果(例如,在gliv中;只需禁用菜单栏即可避免使用鼠标)。另一个例子是LaTeX和PDF文档。

至于终端,大多数人会说屏幕或tmux,但您也可以使用Linux虚拟终端(控制台或ttys)。在X中,urxvt具有Perl扩展名,可启用制表符。对于那些(ttys和urxvt),您可以设置一个统一的界面,例如Alt-J / K可以在选项卡之间切换,因此您不必伸手就能找到箭头键(或其他默认值)。

祝您好运:)完成后(或几乎在那里……您从未完成),请随时给我发送一些您自己的指针,因为我和您一样。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.