新装的vi太精简,给~/.vimrc新增如下:
"backspace键删除前一个字符 set nocompatible "设置制表符宽度 tabstop set ts=4 "设置行首缩进宽度 shiftwidth set sw=4 "输入tab时自动转化为空格 expandtab set et "显示行号 set number #缩写为 set nu "高亮当前行 set cursorline #缩写为cul "高亮当前列 cursorcolumn set cuc "搜索高亮 high light search set hls "搜索是忽略大小写 set ignorecase "将文件格式转换为unix(dos) set fileformat=unix "自动对齐autoindent (继承前一行的缩进方式) set ai "高亮显示匹配的括号 set showmatch "在搜索时,输入的词句的逐字符高亮(类似firefox的搜索) set incsearch "清除\r,类似%s/\r//g set fileformat=unxi "新建.c文件时,自动插入模板(读入$VIM\cfile.tpl的内容) autocmd BufNewFile *.c r $VIM\cfile.tpl "与系统共享剪贴板 set clipboard+=unnamed "整词换行 set linebreak "总是显示状态行set laststatus set ls=2 "换行符,制表符可见模式 set list
## 命令模式下的快捷键: # 合并行 J 将光标所在行的下一行移动到该行,再并将光标移动到行尾
相关参考:
http://blog.csdn.net/macrocrazier/article/details/6404267
http://blog.163.com/goldman2000@126/blog/static/1672968952012317105325654/
#显示当前正在编辑的文件5种方法
冒号模式下:file(简写为:f)或者:ls或者:set ls=2 或者:echo %@
阅读模式下 ctrl + g
#另存为
:saveas xxx
#将当前文件保持为html文件(a.c文件另存为a.c.html)
:TOhtml
# 打开配置文件
:edit $MYVIMRC
#制表符,换行符 可见
:set list
#列出所有选项设置情况
:set all
#向后搜索xxx # n为跳到下一个搜索关键字
:/xxx
#向前搜索xxx
:?xxx
#替换字符
:s/xxx/yyy #将当前行的第一个xxx替换为yyy
:1,10s/xxx/yyy #将1~10行中没行的第一个xxx字符替换为yyy
:10,$s/xxx/yyy/g #将10~最后一行的所有xxx字符替换为yyy
:%s/xxx/yyy/g #将该文件所有的xxx字符替换为yyy,%表示所有行
# 全局替换,模式支持正则
:g/xxx/s/yyy/zzz/g 匹配包含xxx的行,把其中的yyy替换成zzz
:%/xxx/s/yyy/zzz/g 同上
# 显示所有xxx字符
:g/xxx/p
#给文件加密,要取消时,在等待输入密码时直接输入回车即可
:X
#同时打开两个文件,上下分栏显示
vi -o a.c b.c #左右分栏显示为 -O
#插入模式下的宏替换
:ab aazz abcdefghigklmnopqrstuvwxyz
:map <C-1> !abc
一些技巧
#交换光标所在字符和其后的字符
xp
#交换光标所在行和其后的行
ddp
#选中所有行
ggVG
#向上移动9行
9k
#格式化当前文件
gg=G
格式化当前光标接下来的8行
8==
#删除所有行
dG
#上下两行合并
J
#显示总行数
:=
guu 行小写
gUU 行大写
g~~ 行翻转(当然指大小写啦)
guw 字小写(狭义字)
gUw 字大写(狭义字)
g~w 字翻转(狭义字)
vEU 字大写(广义字)
vE~ 字翻转(广义字)
ggguG 把整个文章全部小写(ft!bt!)
阅读模式下的几个常用命令 e 往右跳到光标所在单词尾部 w 往右跳到光标所在单词首部 b 往左调到光标单词的首部 ctrl+u 往下滚动半屏 ctrl+d 往上滚动半屏 ( 移动光标到其所在句子的首部 ) ..................尾部 { 移动光标到其所在段落的首部 } ..................尾部 [n]G 移动第n行首部 cc 光标所在行替换为空行并等待输入数据 A 光标移动到行尾,并等待输入数据 ~ 对光标右边的字符大小写转换,并将光标右移1个字符 编辑模式下的几个命令 :1,5 co 12 # 将1~5行复制到第12行 :1,5mo12 # .......移动.......
#查看当前vim的版本(含有vimrc文件,gvimrc文件,exrc文件路径) :version #缩写为:ver #查看vim环境变量 :!env #windows 下为!set
#同时打开两个文件, 水平方向 vi -o a.c b.c #同时打开两个文件, 垂直方向 vi -O a.c b.c
#为F4添加作者信息 map <F4> ms:call TitleDet()<cr>'s function AddTitle() call append(0,"##############################################") call append(1,"#") call append(2,"#Author: wangshenghui - [email protected]") call append(3,"#") call append(4,"#QQ:417685417") call append(5,"#") call append(6,"#Last modified: ".strftime("%Y-%m-%d %H:%M")) call append(7,"#") call append(8,"#Filename: ".expand("%:t")) call append(9,"#") call append(10,"#Description: ") call append(11,"##############################################") call append(12,"#!/bin/bash") echohl WarningMsg | echo "Successful in adding the copyright." | echohl None endfunction #修改文件修改时间和文件名 function UpdateTitle() normal m' execute '/#*Last modified:/s@:.*$@\=strftime(":%Y-%m-%d %H:%M")@' normal '' normal mk execute '/#*Filename:/s@:.*$@\=":".expand("%:t")@' execute "noh" normal 'k echohl WarningMsg | echo "Successful in updating the copy right." | echohl None endfunction #判断如果前10行中如果有Last modified:字段 #如果没有的话,则代表没有添加过作者的信息等条件,则重新添加 #如果有的话,那么只更新修改时间和文件名 function TitleDet() let n=1 while n < 10 let line = getline(n) if line =~ '^\#\s*\S*Last\smodified:\S*.*$' call UpdateTitle() return endif let n = n + 1 endwhile call AddTitle() endfunction
H 光标跳到屏幕首行
M .... 中间行
L ............ 尾行
`` 光标移动上次位置
详细了解vi,可参看Learning the vi and Vim Editors.pdf