新装的vi太精简,给~/.vimrc新增如下:
"backspace键删除前一个字符set nocompatible"设置制表符宽度 tabstopset ts=4"设置行首缩进宽度 shiftwidthset sw=4"输入tab时自动转化为空格 expandtabset et"显示行号set number #缩写为 set nu"高亮当前行set cursorline #缩写为cul"高亮当前列 cursorcolumnset cuc"搜索高亮 high light searchset hls"搜索是忽略大小写set ignorecase "将文件格式转换为unix(dos)set fileformat=unix"自动对齐autoindent (继承前一行的缩进方式)set ai"高亮显示匹配的括号set showmatch"在搜索时,输入的词句的逐字符高亮(类似firefox的搜索)set incsearch"清除\r,类似%s/\r//gset fileformat=unxi"新建.c文件时,自动插入模板(读入$VIM\cfile.tpl的内容)autocmd BufNewFile *.c r $VIM\cfile.tpl"与系统共享剪贴板set clipboard+=unnamed"整词换行set linebreak"总是显示状态行set laststatusset 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添加作者信息mapms:call TitleDet() 'sfunction AddTitle() call append(0,"##############################################") call append(1,"#") call append(2,"#Author: wangshenghui - wangfeng17399@163.com") 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 Noneendfunction#修改文件修改时间和文件名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 Noneendfunction#判断如果前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