先从vim的安装说起:
1,首先把 vimrc和gvimrc 文件的位置改在/etc目录下:
echo '#define SYS_VIMRC_FILE "/etc/vimrc"' >> src/feature.h echo '#define SYS_GVIMRC_FILE "/etc/gvimrc"' >> src/feature.h |
3, make (make test) make install
4, ln -s vim /usr/bin/vi
5,在默认情况下, vim 是以与 vi 兼容的模式运行。有些人可能喜欢这种模式,但是我们强烈建议使用 vim 模式运行 vim (要不然我们就不必把 vim 包含到这本书里了,用老的 vi 不是更好?)。使用如下命令建立/root/.vimrc:
cat > /etc/vimrc << "EOF" " Begin /etc/vimrc set nocompatible set backspace=2 syntax on " End /etc/vimrc EOF |
set nocompatible 将使vim以比缺省的vi兼容模式功能更强的方式运行。set backspace=2 让退格键能跨行,自动缩进并开始插入。syntax on 打开vim的语法高亮功能。
vi 的工作模式:编辑模式,插入模式,命令模式
k、j、h、l功能分别等同于上、下、左、右箭头键
Ctrl+b 在文件中向上移动一页(相当于 PageUp键)
Ctrl+f 在文件中向下移动一页(相当于 PageDown键)
H 将光标移到屏幕的最上行(Highest)
nH 将光标移到屏幕的第 n行
2H 将光标移到屏幕的第 2行
M 将光标移到屏幕的中间(Middle)
L 将光标移到屏幕的最下行(Lowest)
nL 将光标移到屏幕的倒数第 n行
3L 将光标移到屏幕的倒数第 3行
w 在指定行内右移光标,到下一个字的开头
e 在指定行内右移光标,到一个字的末尾
b 在指定行内左移光标,到前一个字的开头
0 数字0,左移光标,到本行的开头
$ 右移光标,到本行的末尾
^ 移动光标,到本行的第一个非空字符
rc 用 c替换光标所指向的当前字符
nrc 用 c替换光标所指向的前 n个字符
x 删除光标所指向的当前字符
nx 删除光标所指向的前 n个字符
ndw 删除光标右侧的 n个字
db 删除光标左侧的字
ndb 删除光标左侧的 n个字
5db 删除光标左侧的 5个字
dd 删除光标所在行,并去除空隙
ndd 删除 n行内容,并去除空隙
3dd 删除 3行内容,并去除空隙
将其粘贴到正文中的指定位置。完成这一操作的命令是:
p 小写字母 p,将缓冲区的内容粘贴到光标的后面
P 大写字母 P,将缓冲区的内容粘贴到光标的前面
注意上述两个命令中字母的大小写。vi编辑器经常以一对大、小写字母(如 p和 P)来提供一对相似的功能。通常,小写命令在光标的后面进行操作,大写命令在光标的前面进行操作。
yy 复制当前行到内存缓冲区
nyy 复制 n行内容到内存缓冲区
6. 文本选中
vi 可进入到一种成为 Visual的模式,在该模式下,用户能用光标移动命令可视地选择文本,然后再执行其他编辑操作,例如删除、复制
等。 v字符选中命令 V行选中命令
1. 进入插入模式
在编辑模式下正确定位光标之后,可用以下命令转换到插入模式:
i 在光标左侧输入正文
a 在光标右侧输入正文
o 在光标所在行的下一行增添新行
O 在光标所在行的上一行增添新行
I 在光标所在行的开头输入正文
A 在光标所在行的末尾输入正文
上面介绍了几种转换到插入模式的简单方法。另外更有一些命令,他们允许在进入插入模式之前首先删去一段
正文,从而实现正文的替换。这些命令包括:
s 用输入的正文替换光标所指向的字符
ns 用输入的正文替换光标右侧 n个字符
cw 用输入的正文替换光标右侧的字
ncw 用输入的正文替换光标右侧的 n个字
cb 用输入的正文替换光标左侧的字
ncb 用输入的正文替换光标左侧的 n个字
cd 用输入的正文替换光标的所在行
ncd 用输入的正文替换光标下面的 n行
c$ 用输入的正文替换从光标开始到本行末尾的所有字符
c0 用输入的正文替换从本行开头到光标的所有字符
:345w file 将第 345行写入 file文件
:3,5w file 将第 3行至第 5行写入 file文件
:1,.w file 将第 1行至当前行写入 file文件
:.,$w file 将当前行至最后一行写入 file文件
:.,.+5w file 从当前行开始将 6行内容写入 file文件
:1,$w file 将所有内容写入 file文件,相当于 :w file命令
在命令模式下,允许从文件中读取正文,或将正文写入文件。例如:
:w 将编辑的内容写入原始文件,用来保存编辑的中间结果
:wq 将编辑的内容写入原始文件并退出编辑程式(相当于 ZZ命令)
:w file 将编辑的内容写入 file文件,保持原有文件的内容不变
:a,bw file 将第 a行至第 b行的内容写入 file文件
:r file 读取 file文件的内容,插入当前光标所在行的后面
:e file 编辑新文件 file代替原有内容
:f file 将当前文件重命名为file
:f 打印当前文件名称和状态,如文件的行数、光标所在的行号等
4. 正文替换
利用 :s命令能实现字符串的替换。具体的用法包括:
:s/str1/str2/ 用字符串 str2替换行中首次出现的字符串 str1
:s/str1/str2/g 用字符串 str2替换行中所有出现的字符串 str1
:.,$ s/str1/str2/g 用字符串 str2替换正文当前行到末尾所有出现的字符串 str1
:1,$ s/str1/str2/g 用字符串 str2替换正文中所有出现的字符串 str1
:g/str1/s//str2/g 功能同上
从上述替换命令能看到:g放在命令末尾,表示对搜索字符串的每次出现进行替换;不加 g,表示只对搜索
字符串的首次出现进行替换;g放在命令开头,表示对正文中所有包含搜索字符串的行进行替换操作。
6. 恢复文件
vi 在编辑某个文件时,会另外生成一个临时文件,这个文件的名称通常以 .开头,并以 .swp结尾。vi在
正常退出时,该文件被删除,若意外退出,而没有保存文件的最新修改内容,则能使用恢复命令:
:recover 恢复文件
也能在启动 vi时利用 -r选项。
为控制不同的编辑功能,vi提供了非常多内部选项。利用 :set命令能设置选项。基本语法为:
:set option 设置选项 option
常见的功能选项包括:
autoindent 设置该选项,则正文自动缩进
ignorecase 设置该选项,则忽略规则表达式中大小写字母的差别
number 设置该选项,则显示正文行号
ruler 设置该选项,则在屏幕底部显示光标所在行、列的位置
tabstop 设置按 Tab键跳过的空格数。例如 :set tabstop=n,n默认值为 8
mk 将选项保存在当前目录的 .exrc文件中
在编辑正文时,利用 vi命令模式下提供的 shell转换命令,无须退出 vi即可执行 Linux命令,十分
方便。语法格式为:
:! command 执行完 shell命令 command后回到 vi
另外,在编辑模式下,键入 K,可命令 vi查找光标所在单词的手册页,相当于运行 man命令。:g/^/m0
:%s/old_word/new_word/g
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" =>全局配置
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"关掉兼容模式
set nocompatible
"设置历史记录步数
set history=400
"开启文件类型判断插件
filetype plugin on
filetype indent on
"当文件在外部被修改,自动更新该文件
set autoread
"设置快速保存和退出
"快速保存为,s
"快速退出(保存)为,w
"快速退出(不保存)为,q
nmap <leader>s :w!<cr>
nmap <leader>w :wq!<cr>
nmap <leader>q :q!<cr>
"map <C-F9> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR>
"设置快捷键为win方式的快捷键
"source $VIMRUNTIME/mswin.vim
"behave mswin
"set pastetoggle=<F3>
"tag
set tag=../tags,../TAGS,tags,TAGS
"cscope
set cscopequickfix=s-,c-,d-,i-,t-,e-
"c\h文件切换
nnoremap <silent> <F12> :A<CR>
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" =>字体和颜色
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"开启语法
syntax enable
"设置字体
set guifont=dejaVu\ Sans\ Monospace\ 12
"设置配色
colorscheme desert
"高亮显示当前行
set cursorline
hi cursorline guibg=#222222
hi CursorColumn guibg=#333333
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" =>文件和备份
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"关闭自动备份
set nobackup
set nowb
"关闭交换文件
set noswapfile
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" =>折叠
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"开启折叠
"set nofen
set fdl=0
set fdc=2
set fdm=syntax
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" =>文字处理
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"设置(软)制表符宽度为4
set tabstop=4
set softtabstop=4
"set smarttab
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" =>缩进
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"自动缩进
set ai
"智能缩进
set si
"设置缩进的空格数为4
set autoindent
"设置自动缩进:即每行的缩进值与上一行相等;使用 noautoindent 取消设置
set shiftwidth=4
"设置使用 C/C++语言的自动缩进方式
set cindent
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" => Vim界面
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"Set 7 lines to the curors - when moving vertical..
"set so=7
"Turn on WiLd menu
"set wildmenu
"显示标尺
set ruler
"设置命令行的高度
set cmdheight=1
"显示行数
set nu
"显示匹配的括号([{和}])
set showmatch
"高亮显示搜索的内容
set hlsearch
tags的用法