未整理:http://blog.chinaunix.net/uid-10449864-id-2956813.html
http://coolshell.cn/articles/5426.html
http://www.cnblogs.com/amaoxiaozhu/archive/2012/03/23/2414007.html 这篇文章非常好
1 vim图例
1.1 vim三种模式
1.2 vim功能键
2 vim操作
2.1 vim打开文件
vi filename #打开文件,并停留在上次编辑的位置
vi +n filename #打开文件,并跳转到第n行
vi +/word filename #打开文件,跳转到含有内容word的行
2.2 vim的移动
h 或 向左箭头键(←)
光标向左移动一个字符
j 或 向下箭头键(↓)
光标向下移动一个字符
k 或 向上箭头键(↑)
光标向上移动一个字符
l 或 向右箭头键(→)
光标向右移动一个字符
向后移动30行 :30+↓或者30+j
向后移动30个字符距离 :30+<space>
向后移动30行 :30+<Enter>
向下移动一页 :<pagedown>
向上移动一页 :<pageup>
本行最前面 :<home>
本行最后面 :<end>
2.2 vim的插入
i | 当前光标前插入 |
a | 当前光标后插入 |
I | 行首插入 |
A | 行尾插入 |
o | 当前行后插新行 |
O | 当前行前插新行 |
2.3 vim的删除
cw | 替换单词 |
dd | 删除当前行 |
x | 删除当前光标字符【相当于delete】 |
X | 删除光标前一个字符【相当于backspace】 |
2.4 vim的跳转
gg | 回到文件首 |
ngg/n | 跳转到第n行 |
G | 回到文件尾 |
2.4 vim的复制和粘贴
yy | 复制当前行 |
p | p 为将已复制的数据在光标下一行贴上 |
P | P 则为贴在游标上一行 |
1,set paste/ set nopaste
2,设置.vimrc
2.5 vim的撤销和重做
u | 撤销上一步的操作 |
ctrl+r | 重做前一个命令 |
2.6 vim中的选中
按v或者V或者ctrl+v进入可视模式(三中按键功能不同,自己体验就明白了)
v | 选任意字段 |
V | 选任意行段 |
ctrl+v | 选任意长方形块 |
【ctrl+v】 + 【I(shift i)】+【Esc Esc】,可以以正方形方式增加内容。
2.7 vim的取消高亮
在vim中用"/"查找后,如何把棕色高亮背景去掉?比如我查找"printf",使用"/printf", 然后文件中的"printf"都以棕色背景高亮显示出来, 但下次打开该文件, 发现"printf"仍被高亮显示
:nohlsearch
2.8 vim中下一个单词,上一个单词
下一个单词 w
上一个单词 b
yw 直接复制一个单词
cw直接修改一个单词
vim中查找下一个 shift+*
vim中补全单词 ctrl+p
Ctrl+ n 中的n为next 中n;
Ctrl+p中的p为previous 中p。
2.9 vim字符串的查找
1. vim 中用 / 和 ? 来查找字符串,两者的区别是:/string 会高亮显示光标后匹配的第一个字符串,回车后光标移到该字符串的第一个字母;
?string 会高亮显示光标前匹配的第一个字符串,回车后光标移到该字符串的第一个字母。
/\<word\> 查找单独一个单词
在回车之后,按n键同方向转到下一个匹配的字符串,按N键反方向转到上一个匹配的字符串。
2. 用命令 :set ic 和 :set noic 来分别设置查找时不区分和区分大小写。
:set ic(ignorecase 的缩写) 忽略大小写
:set noic(noignorecase 的缩写) 不忽略大小写
或者直接查找单词时:/word\c 来忽略大小写 /word\C来区别大小写
如果查找特殊字符,如 ^、$、*、/ 和 .,需要在前面加 \ 来转义。2.10 vim字符串的替换
1. vim 中可用 :s 命令来替换字符串,具体如下:加g ,放在命令末尾,表示对搜索字符串的每次出现进行替换;
不加 g,表示只对搜索字符串的首次出现进行替换;
:s/str1/str2/ 替换当前行第一个 str1 为 str2
:s/str1/str2/g 替换当前行中所有 str1 为 str2
:m,ns/str1/str2/ 替换第 n 行开始到最后一行中每一行的第一个 str1 为 str2
:m,ns/str1/str2/g 替换第 n 行开始到最后一行中所有的 str1 为 str2
(注:m和n 为数字,若m为 .,表示为当前行开始;若n为$,则表示到最后一行结束)
2.使用’#‘或者’+‘来替换掉’/‘作为分隔符
如果使用 # 作为分隔符,则中间出现的 / 不会作为分隔符,比如:
:s#str1/#str2/# 替换当前行第一个 str1/ 为 str2/
:%s+/oradata/apras/+/user01/apras1+ (使用+ 来 替换 / ): /oradata/apras/替换成/user01/apras1/
3. 使用%表示替换每一行
:%s/str1/str2/ (等同于 :g/str1/s//str2/) 替换每一行的第一个 str1 为 str2
:%s/str1/str2/g (等同于 :g/str1/s//str2/g 和 :1,$ s/str1/str2/g ) 替换文中所有 str1 为 str2
2.11 vim多窗口
1,横向切割
:split filename
2,纵向切割
:vsplit filename
3,快捷键
先进入 vim filename1
先横向切割 ^w+s
再将第二个窗口(上面的)编辑其他文件 :e filename2
再纵向切割 ^w+v
再将第三个窗口(左上角)编辑其他文件 :e filename3
若要退出,则使用 :q或者:qa
3 vim高级操作
3.1 vim查找相同两行
vim test.txt
:sort
:/^\(.\+\)$\n\1
3.2 vim删除重复行
vim test.txt
:sort
:g/^\(.\+\)$\n\1/d
3.3 文件末尾有^M标记
文本内容:如下示:
4768589 442352^M
4768590 asd520520^M
4768591 1^M
4768592 7936369^M
4768593 HZhaMBdl^M
4768594 3461593520^M
4768595 1^M
4768596 111111^M
4768597 7936369^M
4768598 8914066^M
4768599 7936369^M
4768600 wangyut2^M
set list结果:如果set list来显示所有包括不可见字符时(用set nolist取消),结果是这样的:
4768589 442352^M$
4768590 asd520520^M$
4768591 1^M$
4768592 7936369^M$
4768593 HZhaMBdl^M$
4768594 3461593520^M$
4768595 1^M$
4768596 111111^M$
4768597 7936369^M$
4768598 8914066^M$
4768599 7936369^M$
4768600 wangyut2^M$
问题原因:windows创建的文件是 \n\r结束的, 而linux,mac这种unix类系统是\n结束的。所以unix的文本到windows会出现换行丢失(ultraedit这种软件可以正确识别); 而反过来就会出现^M的符号了 。
解决方案:
在 Vim 的命令模式中输入 :%s/^M$//g 后,回车即会自动删除该文件中的所有 ^M 字符。
注意: ^M 要用 Ctrl+v, Ctrl+m 来输入, 用键盘直接敲^和M是不行的! 后面的 $ 代表匹配行尾的内容,最后的 g 则表示每行中匹配到的内容都要置换--全局替换,否则只替换每行中匹配到的第一个。
sed ‘s/^M//' file // 正确,但是 ^M = Ctrl+v, Ctrl+m
3.4 vim删除偶数行奇数行
删除奇数行偶数行,也可以用normal命令,分别为:
奇数行
:%norm jkdd
偶数行
:%norm jdd
4 ~/.vimrc的配置
在黏贴代码之前,进入insert模式,按F9,就可以关闭自动缩进。
当需要自己手写代码的时候,进入insert模式,默认就是自动缩进了。
set nocompatible
syn on " 打开语法高亮
set guifont=Luxi\ Mono\ 9 " 设置字体,字体名称和字号
set tabstop=4 " 设置tab键的宽度
set expandtab
set shiftwidth=4 " 换行时行间交错使用4个空格
set autoindent
set cindent
filetype plugin indent on
autocmd FileType c,cpp set cinoptions=:0,g0
autocmd FileType java set sw=2
autocmd FileType java set ts=2
set backspace=2 " 设置退格键可用
if has("gui_running")
color evening
else
color default
endif
set incsearch " 查询时非常方便,如要查找book单词,当输入到/b时,会自动找到
set hlsearch
set nonu " 显示行号
set showmatch " 设置匹配模式,类似当输入一个左括号时会匹配相应的那个右括号
set cursorline
"set paste
set ruler " 在编辑过程中,在右下角显示光标位置的状态行
au BufNewFile,BufRead *.hive set filetype=sql
au BufReadPost * if line("'\"") > 0|if line("'\"") <= line("$")|exe("norm '\"")|else|exe "norm $"|endif|endif " 下次进入保留在上次停留位置
cmap w!! %!sudo tee > /dev/null %
例如如果要设置显示行号
将set nonu注释掉:"set nonu
再增加一行为: set number
显示所有(包括不可见)字符 set list
:n1,n2s/word1/word2/g n1 与 n2 为数字。在第 n1 与 n2 行之间寻找 word1 这个字符串,并将该字符串取代为 word2 !举例来说,在 100 到 200 行之间搜寻 vbird 并取代为 VBIRD 则:『:100,200s/vbird/VBIRD/g』。(常用)
:1,$s/word1/word2/gc 从第一行到最后一行寻找 word1 字符串,并将该字符串取代为word2 !且在取代前显提示字符给使用者确认 (conform) 是否需要取代!(常用)
:e! 将档案还原到最原始的状态!
ZZ 若档案没有更动,则不储存离开,若档案已经经过更动,则储存后离开!
:set nu 显示行号,设定之后,会在每一行的前缀显示该行的行号
:set nonu 与 set nu 相反,为取消行号!
5,python插件
http://linux.chinaunix.net/techdoc/desktop/2006/06/02/933610.shtml
http://www.cnblogs.com/amaoxiaozhu/archive/2012/04/05/2423009.html
5.1,python.vim:这是python的语法高亮模块
copy python.vim to ~/.vim/afer/ftplugin
将文件中" let python_highlight_all = 1前面的引号去掉,可支持内置函数,数字,空格,异常的语法高亮。
5.2,pydiction:这是python的tab键自动补全
a.python_pydiction.vim
将文件 python_pydiction.vim 放到 ~/.vim/after/ftplugin/ 路径下,如果这个路径不存在,你可以自己创建这个文件夹结构。(Windows下面的话放在目录类似的结构中)b.complete-dict
将complete-dict文件放到你自己的某个路径下,后面的配置会用到这个文件,这个文件就是记录所有的python关键词。我将这个文件放到 ~/.vim/tools/pydiction/complete-dict
c. 配置 .vimrc 文件
在 ~/.vimrc 文件中添加如下配置"以下用来配置pydict.vim插件
set nobackup "取消备份即swp文件
set helplang=cn "设置中文帮助文档
set encoding=utf-8 "设置编码
syntax enable
syntax on "设置语法高亮
filetype plugin on
let g:pydiction_location = '~/.vim/tools/pydiction/complete-dict'
let g:pydiction_menu_height = 20
5.3,Matrix插件
在 Vim 网站上下载文件 matrix.vim,存到 ~/.vim/plugin 目录中即可。
是的,说的就是电影 Matrix!Vim 的脚本并不是都干“正经事”的。想看一下电影里那些酷酷的字符在 Vim 的窗口里翻滚吗?发一个命令“:Matrix”即可(按任意键退出)。