个人工具

UbuntuManual:编辑器

来自Ubuntu中文

跳转至: 导航, 搜索
序言 Ubuntu 基础 Ubuntu 系统安装提示 Ubuntu指南
发行版升级 Ubuntu 软件包管理 Ubuntu下的 Linux 内核 Ubuntu 小技巧
Ubuntu 系统微调 网络设置 编辑器 版本控制系统
编程 GnuPG Ubuntu 技术支持 附录

第 11 章 - 编辑器

流行的编辑器

Linux下有众多运行于控制台环境的文本编辑器任你选用,它们包括:

  • vim: 强大而轻便的BSD传统编辑器。VI iMproved.
  • emacs: 重量级GNU传统编辑器。RMS (Richard M. Stallman)原创。
  • xemacs: Emacs的下一代,由Lucid原创。
  • mcedit: 新型GNU编辑器。也就是mc内置编辑器。参阅 MC 里面的编辑器, 第 4.2.5 节.
  • ae: 默认的小型编辑器(Potato)。通常不用它。
  • nano: 默认的小型GNU编辑器(Woody)。类似pico。
  • joe: 用于旧式的WordStar或TurboPascal。
  • jed: 快速、多功能、菜单式编辑器,兼容Emacs键盘操作方式。
  • jove: 微型编辑器,兼容Emacs键盘操作方式。
  • nvi: 新版vi。Bug-for-bug compatible with the original vi.

使用update-alternatives --config editor命令可设置默认的编辑器。许多程序也使用环境变量EDITOR或VISUAL来调用编辑器。参阅 MC 里面的编辑器, 第 4.2.5 节.

还有一些运行于X环境的编辑器也值得一提:

  • gvim: Vim with GUI (vim and vim-gtk package)
  • emacs: The One True Emacs (auto-detect X).
  • xemacs: Next generation Emacs (auto-detect X).

这些X客户端的命令使用标准选项如-fn a24,这对象我这样的老家伙来说就再好不过了:)参阅 X 客户端, 第 9.4.4 节。

应急的编辑器

有些编辑器安装在/bin/下,这类编辑器至少应该安装一个,以免当/usr/不能访问时,无法编辑文件。

  • elvis-tiny: 最小的vi编辑器(用vi命令开打)
  • nano-tiny: 最小的非vi编辑器(用nano-tiny命令打开)
  • nano: 最小的非vi编辑器(用nano命令打开) (Sarge)
  • ed: 最小的编辑器(常驻系统但使用起来极不方便)

Emacs和Vim

Vim提示

程序运行时可按下<F1>阅读“VIM - main help file”文档。

<F1>           帮助
<esc>          返回到正常模式
V              Visual模式
i              Insert模式
:              命令行命令
:set tw=72     设置文本宽为72
<F11>          Insert (paste) 模式
:r! date -R    Insert RFC-822 数据
qa             将键盘操作记录到注册表a
q              停止键盘操作记录
@a             播放注册表a中记录的键盘操作
:edit foo.txt  载入并编辑另一个文件foo.txt
:wnext         写入当前文件然后编辑下一个文件

q和@可用来记录简单的键盘宏然后回放它们。例如,想创建一个宏为光标所在处的单词加上HTML斜体字标签,可以输入qii[ea</i>^[q(此处[表示按ESC键)。然后,在单词前输入@i,编辑器就会自动为它加上<i>和

亦可参阅 在 Vim 中使用 GnuPG, 第 14.4.2 节.

Emacs提示

<F1>                帮助
<F10>               菜单
C-u M-! date -R     插入RFC-822数据

打开编辑器

打开编辑器:                   emacs filename  vim filename
以vi兼容方式打开:                             vim -C
以vi不兼容方式打开:                           vim -N
默认编译方式打开:             emacs -q        vim -N -u NONE

编辑器命令总汇(Emacs,Vim)

exit:                           C-x C-c         :qa /:wq /:xa /:q!
Get back/command mode:          C-g             <esc>
Backward(left):                 C-b             h
Forward(right):                 C-f             l
Next(down):                     C-n             j
Previous(up):                   C-p             k
stArt of line(^):               C-a             0
End of line($):                 C-e             $
mUltiple commands:              C-u nnn cmd     nnn cmd
Multiple commands:              M-digitkey cmd
save File:                      C-x C-s         :w file
beginning of buffer:            M-<             1G
end of buffer:                  M->             G
scroll forward 1 screen:        C-v             ^F
scroll forward 1/2 screen:                      ^D
scroll forward 1 line:                          ^E
scroll backward 1 screen:       M-v             ^B
scroll backward 1/2 screen:                     ^U
scroll backward 1 line:                         ^Y
scroll the other window:        M-C-v
delete under cursor:            C-d             x
delete from cursor to eol:      C-k             D
iSearch forward:                C-s
isearch Reverse:                C-r
Search forward:                 C-s enter       /
search Reverse:                 C-r enter       ?
isearch regexp:                 M-C-s
isearch backward regexp:        M-C-r
search regexp:                  M-C-s enter     /
search backward regexp:         M-C-r enter     ?
Help:                           C-h C-h         :help
Help Apropos:                   C-h a
Help key Bindings:              C-h b           :help [key]
Help Info:                      C-h i
Help Major mode:                C-h m
Help tutorial:                  C-h t           :help howto
Undo:                           C-_             u
Redo:                           C-f             ^R
Mark cursor position:           [email protected]             m{a-zA-Z}
eXchange Mark and position:     C-x C-x
goto mark in current file:                      '{a-z}
goto mark in any file:                          '{A-Z}
copy region:                    M-w             {visual}y
kill region:                    C-w             {visual}d
Yank and keep buffer:           C-y             
Yank from kill buffer:          M-y             p
convert region to Upper:        C-x C-u         {visual}U
convert region to Lower:        C-x C-l         {visual}u
Insert special char:            C-q octalnum/keystroke  
^V decimal/keystroke
replace:                        M-x replace-string      :%s/aaa/bbb/g
replace regexp:                 M-x replace-regexp      :%s/aaa/bbb/g
query replace:                  M-%                     :%s/aaa/bbb/gc
query replace:                  M-x query-replace
query replace regexp:           M-x query-replace-regexp
Open file:                      C-x C-f         :r file
Save file:                      C-x C-s         :w
Save all buffers:               C-x s           :wa
Save as:                        C-x C-w file    :w file
Prompt for buffer:              C-x b
List buffers:                   C-x C-b         :buffers
Toggle read-only:               C-x C-q         :set ro
Prompt and kill buffer:         C-x k
Split vertical:                 C-x 2           :split
Split horizontal:               C-x 3           :vsplit (ver. 6)
Move to other window:           C-x o           ^Wp
Delete this window:             C-x 0           :q
Delete other window(s):         C-x 1           ^Wo
run shell in bg:                M-x compile
kill shell run in bg:           M-x kill-compilation
run make:                                       :make Makefile
check error message:            C-x`            :echo errmsg
run shell and record:           M-x shell       :!script -a tmp
...clean BS, ...                                :!col -b <tmp >record
...save/recall shell record:    C-x C-w record  :r record
run shell:                      M-! sh          :sh
run command:                    M-! cmd         :!cmd
run command and insert:         C-u M-! cmd     :r!cmd
run filter:                     M-| file        {visual}:w file
run filter and insert:          C-u M-| filter  {visual}:!filter
show option                                     :se[t] {option}?
reset option to default                         :se[t] {option}&
reset boolean option                            :se[t] no{option}
toggle boolean option                           :se[t] inv{option}
wrap text at column 72                          :se tw=72
do not wrap                                     :se tw=0
autoindent                                      :se ai
expand tab                                      :se et
specify comment (mail)                          :se comments=n:>,n:\|

run GDB                         M-x gdb                        
describe GDB mode               C-h m                          
step one line                   M-s
next line                       M-n
step one instruction (stepi)    M-i                            
finish current stack frame      C-c C-f                        
continue                        M-c                            
up arg frames                   M-u                            
down arg frames                 M-d                            
copy number from point, insert at the end 
C-x &                          
set break point                 C-x SPC

Vim设置

要使用Vim的全部功能和关键字高亮显示,请在~/.vimrc或/etc/vimrc中添加如下内容:

set nocompatible
set nopaste
set pastetoggle=<f11>
syn on

粘贴模式能避免自动缩进功能影响在控制台终端下的剪切-粘贴操作,它更象是“:set noai”。

有关GnuPG整合的信息参阅 在 Vim 中使用 GnuPG, 第 14.4.2 节。

Ctags

执行apt-get install exuberant-ctags,接着就可以在源代码文件中运行ctags了。在Vim中输入:tag function_name可直接跳到function_name的开始行。它适用于C、C++、Java、Python、和其它许多编辑语言。

Emacs有相同的ctags功能。

将高亮显示的屏显内容转化为HTML文件

在Vim命令模式下输入so \$VIMRUNTIME/syntax/2html.vim可以将屏幕上高亮显示的文本转化为HTML代码,然后:w file.html存盘,:q退出。对C等源代码特别适用。

用vim分割屏显

vim可以在多分割窗口(multi-split-screen )环境下编辑多个文件。想了解有关详情可输入:help usr_08.txt。

要分割屏幕显示多个不同文件,在vi命令提示符后输入:

:split another-file
:vsplit another-file 

或者在shell提示符后输入:

$ vi -o file1.txt file2.txt   # 水平分割
$ vi -O file1.txt file2.txt   # 垂直分割

就可以打开多窗口vi。

$ vimdiff file.txt~ file.txt         # 检查file.txt最近的修改情况
$ vimdiff file.en.sgml file.fr.sgml  # 检查翻译情况
$ gvimdiff file.txt~ file.txt        # 在X下

上述操作可以明确地显示源始文件与备份文件的差别。对SGML文件,它进行标签匹配检查,所以用它来检查翻译结果十分有效。

用Ctrl-W命令指定光标移动:

Ctrl-W +      扩大窗口
Ctrl-W -      缩小窗口
Ctrl-W h      移动到窗口左边
Ctrl-W j      移动到窗口下边
Ctrl-W k      移动到窗口上边
Ctrl-W l      移动到窗口右边
...

下列命令用于滚屏控制:

:set scrollbind
:set noscrollbind