前言:
后台开发不用vim是不可能的,特别是有的环境下只有vim可用,这可如何是好?所以,vim不得不用。
将一些常用的使用方法记录于此。
将源代码转化为彩色的html文档。
首先,确保你是处于语法加亮状态,把要转换的源码用vim打开,看看是不是有颜色的?如果不是,使用命令:
:syntax enable
将vim的语法加亮功能打开
然后,执行命令:
:source $VIMRUNTIME/syntax/2html.vim
Okey,vim在另外一个窗口里面显示转换好的c++源码。大功就告成了,赶快保存下来吧,执行命令:
:write myhtml.html
vim set list
set nolist
(特别提醒: 如果您已经按照下面的设置设置好了, 还是没有正确的显示中文, 那么请将securecRT终端再开一个窗口 clone session。不知为何, 第一次进去总是乱码)
场景一:
使用终端 securecrt终端,通过cat方式显示utf-8编码的文件,需要:
1)securecrt的选项设置编码为utf-8
session-option=》terminal=》Appreance=》character encoding。
并通过新开一个终端的方式使之生效!!(必须新开一个新的终端窗口,原窗口改完不会生效)
说明:
.bashrc 里面不论配置 LC_ALL=xx_xx.utf8, 还是 LC_ALL=zh_CN.gbk, 都不影响显示
场景二:
使用终端 securecrt终端,通过vim方式显示utf-8编码的文件,需要:
1)securecrt的选项设置编码为utf-8
session-option=》terminal=》Appreance=》character encoding。
并通过新开一个终端的方式使之生效!!(必须新开一个新的终端窗口,原窗口改完不会生效)
2)vim的.vimrc配置如下:
set nocompatible
set encoding=utf-8
set fileencodings=utf-8,cp936
“如上设置是vim可以识别utf-8和gbk的文件
说明:
.bashrc 里面不论配置 LC_ALL=xx_xx.utf8, 还是 LC_ALL=zh_CN.gbk, 都不影响显示
场景三:
使用终端 securecrt终端,通过cat方式显示gbk编码的文件,需要:
1)securecrt的选项设置编码为gbk
session-option=》terminal=》Appreance=》character encoding。
并通过新开一个终端的方式使之生效!!(必须新开一个新的终端窗口,原窗口改完不会生效)
(!!这个好像不用新开窗口也能生效)
说明:
此时 LC_ALL的配置应该不影响,不过我此时的LC_ALL配置为:export LC_ALL=zh_CN.gbk
场景四:
使用终端 securecrt终端,通过vim方式显示gbk编码的文件,需要:
1)securecrt的选项设置编码为utf-8
是的!必须选择utf-8!!!,否则不能生效!!!
并通过新开一个终端的方式使之生效!!(必须新开一个新的终端窗口,原窗口改完不会生效)
1)设置vim
set nocompatible
set encoding=utf-8
set fileencodings=utf-8,cp936
“如上设置是vim可以识别utf-8和gbk的文件
说明:
此时 LC_ALL的配置应该不影响,不过我此时的LC_ALL配置为:export LC_ALL=zh_CN.gbk
:tselect 显示列表
:tn和:tp 显示后一个tag和前一个tag
ctrl+n ctrl+p 来在提示菜单中上下选择.
可用于自动补全是的多重提示
在历史窗口(文件)之间跳转的通用方法:
ctrl+o ctrl+i 在历史浏览的各个文件中跳转.
无用你是用tags的ctrl+]跳走了,还是通过gf调走了, ctrl+i/O都可以在不同的文件之前跳转
如何想VC2005那样,一下子打开指定的代码中指定头文件,跳转到指定的头文件?
vim的path功能, 解决了我打开文件头文件不方便的难题
举例如下:
18 #include "panel_auth.h"
19 #include "ptlogin_app_id.h"
20 #include "uuid_key.h"
21 #include "html_template.h"
如何在光标处在panel_auth.h下的时候, 快速的打开panel_auth.h文件呢?
答案: vim的gf命令 和 path功能.
1)gf用来打开光标下的文件.
2)path用于指定搜索文件的路径
举例: 假设我的源码放在isd_qzoneappbase_proj路径下, 如下方法设置path即可.
set path=.,/usr/include,
set path+=/data/home/nemo/code/isd_qzoneappbase_proj/**
首先把当前路径和系统头文件路径设在path路径下,然后再把源码的路径设置进去
此时:就可用gf打开isd_qzoneappbase_proj目录(包括递归目录)下的任一头文件, 也可以打开系统的头文件
一种将当前光标下的单词自动输入到命令行的方法
该方法非常有用,可以用来自定义很多快捷键!
eg:如下的快捷键将自动执行tselect 当前光标下的函数。 查找当前光标下函数的所有tag
153 nmap
定义一些快速关闭窗口的快捷键
,ww 快速关闭当前窗口
,wh 快速关闭左侧窗口
,wj ,wk ,wl 的含义同hjkl的方向的含义一样,快速关闭指定方向的窗口
配置如下:
155 let mapleader = ","
162 "关闭上下左右窗口的快捷键
163 "另外注意
164 "
165 "
166 map
167 map
168 map
169 map
170 "关闭当前窗口
171 map
vim中快速格式化代码(将凌乱不看的代码对齐)
进入v模式,选中代码, 按 = 号
vim中的一些简写,缩写语法
快速输入名字
:iabbrev zdl Nemozhang // 记Nemozhang的缩写为zdl, 在插入模式下输入zdl,再接一个空格是,会自动把zdl扩展为nemozhang
:iab zdl Nemozhang也行
程序员常用的快速输入注释
:iabbrev #b /****************************************
:iabbrev #e
查看全部简写
:abbreviate
删除简写
:iunabbreviat zdl
:iunab zdl
vim 中在函数间快速移动,快速的在代码中移动
zb : 将当前光标所在行显示在页面最下面
zt : 将当前光标所在行显示在页面最上面
zz : 跳到中间(!!! 慎用, 因为大写的ZZ会直接保存并退出vim)
% 跳到 和() {}等匹配的对应位置
{ 或 } 跳到下/上一个空白行 ==========> 非常有用!!! 注意{是shift+[键
[[ 跳到函数定义开头 或者上一个函数定义开头
][ 跳到函数定义结尾 , 或者下一个函数定义结尾
]] 跳到下一个函数开头
gd 跳到变量的定义处(对局部变量有效)(不怎么有用,可以直接#号搜索即可)
vim中使用make
:cc 3 跳到第三个错误处
:cnext 下一个错误
:cprevious
:clist! 查看所有make的报错
查看vim中的已有的按键映射
:map
比如我本机输出:
,ee :e ~/.vimrc
,ss :source ~/.vimrc
vim 自带的文件浏览 (不是WMToggle插件哦)
edit . 浏览当前文件夹文件, 可以快速的打开其他文件
edit dirname 浏览指定的文件夹
不退出vim,不保存当前文件,而打开新的文件
:edit! foo.txt 强行忽略当前文件的修改,而打开新的文件
既不想保存,也不想放弃修改,又想编辑其他的文件
:hide edit foo.txt
打开文件时,回到上次对该文件的最后编辑的位置 (非常高效)
`" 回到你离开文件时光标所在的位置。 比如我上次编辑了applist_select.cgi下次可以通过这种方法重新回到最后查看过的位置
`. 回到你离开文件是最后改动的位置。
vim的文件另存为
:saveas newfilename 另存为。与windows下行为一致,保存后,编辑新的文件。而不是老文件。
:w newfilename 只是把文件保存为一个新的文件,但vim仍然编辑的是老文件。
已只读方式打开文档(真正只读,不可修改)
vim -M applist2.cpp
打开文件
:e ~/1.php // 打开~/1.php
查询vim的设置情况
:set compatible? 查询是否设置了兼容模式
:set filetype? 查询vim识别的当前的文件类型
vim中F1,F2,F3,F4等按键映射不管用,出现P,Q,R,S等奇怪字符
按 F1 显示 P 然后换行
按 F2 显示 Q 然后换行
按 F3 显示 R 然后换行
按 F4 显示 S 然后换行
答案:我是用的终端secureCRT的设置有问题。
option-terminal-emulation-terminal:【xterm】。即可。
vimdiff
linux下高级的,彩色的文件比较工具
使用方法: vimdiff file1 file2
各个差异点之间快速移动
跳转到下一个差异点:]c
跳到上一个差异点:[c
把一个差异点中当前文件的内容复制到另一个文件里
dp (diff "put") |
把另一个文件的内容复制到当前行中
do (diff "get",之所以不用dg,是因为dg已经被另一个命令占用了) 重新比较文件差异(通常vim在文件更新后会自动更新差异,如果没有,可以通过下面命令手动更新) |
:diffupdate
设置差异点处显示的上下文行数(vim默认是6)
:set diffopt=context:3 |
关于vimdiff非常详细的参考资料:
技巧:Vimdiff 使用
http://www.ibm.com/developerworks/cn/linux/l-vimdiff/#ibm-pcon
有个文件,混杂了utf-8编码和gbk编码, 在vim里面打开完全乱码无法看,没有一个字可以看清楚
在windows下可以打开,只有部分显示乱码.
这是因为我的vim设了utf-16le, 这个格式几乎可以打开任何文件,可惜的是,当文件不是utf-16le的时候,打开就完全乱码了.
下面是我的错误的vim设置(其实也不算错误啦)
set fileencodings=usc-bom,utf-8,chinese,gb18030,utf-16,utf-16le
vim打开文件时, 首先从前面的编码尝试, 如果能打开就采用其. 当vim尝试了一圈之后,发现前面的都一一不支持, 最后utf-16le支持打开,可惜我的文件并是不utf-16le格式的!
解决方法:
把utf-16le去掉即可. 去掉之后, 我的utf8和gbk的混合文件就可以以utf-8打开或者gbk打开了. 至少只有部分字符时乱码,大部分英文自己是可以看的.
所以一般都把兼容性不强的编码放在前面,比如上面的usc-bom应该是ascii编码,兼容性最差.设置utf-16le是个好事,能兼容打开更多的文档,可以遇到了混杂utf8和gbk的时候就杯具了, 如果极少使用utf-16le的文件, 那么干脆把这个utf-16了去掉较好.
vim中的滚屏
Ctrl+E 向前滚动一行(光标跟着一起走)
Ctrl+Y 向后滚动一行(光标跟着一起走)
Ctrl+F/B 向前向后滚动一页
.vimrc文件的第一行一般都是 :set nocp 或 :set nocompatible, 为什么?
因为.vimrc存在的目的就是为了是vim在vim模式下工作。 所以,先设为vi不兼容,也就是vim模式。
:help cp 查看更多信息
有没有办法在不退出vim的情况下重新加载.vimrc的配置?
:source ~/.vimrc 即可。
可以映射快捷键,在.vimrc中加入如下两行
let mapleader = ","
map
map
这样在vim的正常模式下, 输入 “,ss” 即可重新加载.vimrc, 输入“,ee”即可编辑.vimrc
有关
编辑模式下退格键backspace退格键和上下左右光标移动键不能用,非常不方便。
在编辑模式下,移动光标会变成A B C D等字符并换行。
这是vim与vi的兼容性问题。默认vim工作在vi兼容模式下,很多新手带来了困惑。
:set nocp 或 :set nocompatible
查看帮助 :help nocp
编辑模式下,backspace退格键无法删除文档里原有的东西,只能删除刚输入的东西。
需要设定
:set bs=2 或 :set bs=indent,eol,start 或 :set backspace=indent,eol,start
查看帮助 :help bs
文章参考:http://blog.csdn.net/ablo_zhou/archive/2009/02/03/3860236.aspx
光标在行尾按右方向键不到下一行行首,在行首按左方向键不到上一行行尾,怎么回事?
需要设定
:set ww=b,s,[,]
参考帮助 :help ww 或者 :help whichwrap
b: 在 Normal 或 Visual 模式下按删除(Backspace)键。
s: 在 Normal 或 Visual 模式下按空格键。
h: 在 Normal 或 Visual 模式下按 h 键。
l: 在 Normal 或 Visual 模式下按 l 键。
<: 在 Normal 或 Visual 模式下按左方向键。
>: 在 Normal 或 Visual 模式下按右方向键。
~: 在 Normal 模式下按 ~ 键(翻转当前字母大小写)。
[: 在 Insert 或 Replace 模式下按左方向键。
]: 在 Insert 或 Replace 模式下按右方向键。
文章参考:http://blog.csdn.net/ablo_zhou/archive/2009/02/03/3860236.aspx
复制粘贴时,一旦使用了dd,dw,原来复制的东西就被删除的东东替换了
使用指定的寄存器粘贴. 避免受到dw dd命令的干扰
"0p 0指的是第0个寄存器, 双引号不可少. 完整命令时: 双引号0p
更多参考寄存器的玩意参考:
http://blog.csdn.net/KataDoc360/archive/2009/08/09/4427721.aspx
快速在项目中查找文件 不用在各个目录之间切换
类似于si的输入部分文件名字自动匹配一样.
1) 易水 vim进阶 的博客上有个vim插件可以用
2) 人肉方法
1) 收集全部项目文件
find . -name "*.h" -o -name "*.c">allfiles
2)用vim打开allfiles 搜索指定的文件名 通过 gf命令快速打开
快速返回上次编辑过的地方(光标停留的地方)
类似于vc2005的ctrl + '+/-'.
快速查看文件信息
CTRL+G 文件名字,文件行数,以及当前所在的位置行号
光标快速移动
hl 左右 jk上下
如何方便的记住呢? 键盘上J所在那行最右一个字母字母是J,所以,J是向右, 同样H是向左喽.
j可以认为字母的下半身比较大,往下沉.
w,b向左/向右移动一个单词,相当于windows的ctrl+<>
当某一行较长时,hl上下移动时可能会跨行,这时你可以在按 h、j、k 或者 l 之前键入一个 g即可.
0行首,
$行尾
^第一个非空字符 (非常有用!!!)
(注意,三个键在键盘上市从右向左,^和$需要配合shift键输入)
向前移动一个词w,向后移动一个词b (相当于windows下的ctrl+光标移动)
*:读取光标处的字符串,并高亮文章中的全部字符串.并且移动光标到它再次出现的地方。(相当于快速搜索sourceinsight的alt+f4快速搜索)
#:反方向快速搜索光标所在的单词
3j 将会把光标向下移动三行。
numG:将光标定位到num行。(输入该命令是无须线输入:号),等价于 “:num回车”
文件开头:gg
文件结尾:G
上翻页:ctrl+b (记住翻页时bf即可。)
下翻页:ctrl+f
a:在当前字符的右边插入
o: 新插入一行
如何用vim 删除指定区域的文字?(注意,不是删除一样哦)
输入 V 进入 visual 模式, 左右移动光标选中区域, 按D键即可删除。
复制指定区域通删除是一样的,区别的是,复制使用y。
vim支持列模式吗?
输入 Ctrl+V 进入 列visual模式,可以选择矩形块。
如何不退出vim的情况下执行shell命令?
vim :!进入shell模式,输入shell命令
如何让vim跳到一个函数的原型(函数的定义)处?
ctrl+]调往函数定义(如果有多个定义,使用:ts), 看完后跳回ctrl+t。
前提是要ctags的支持。
1)安装ctags apt-get install exuberant-ctags
2)ctags -R * 在当目录下为所有源代码文件生成tags。 在当前目录下运行vim即可支持ctrl+], ctrl+t跳转。
3)如果tags在其他的目录,那么可以通过如下的方式明确指定tags
:set tags=~/code/xxx/tags
4) 需注意:vim启动时,vim的工作目录(vim启动是所在的目录)的名为tags的文件档案会被自动载入,同时,位于$VIMRUNTIME/doc 及 $HOME/.vim/doc 目錄下的 tags 檔也會自動載入。而且,凡是載入的 tags 檔裡頭所有標誌文字都可以使用補全鍵來補全,別忘了這個好用的功能。
5)如果同一个在多处存在相同的tag,怎么办?
:ts 命令就能列出一个列表供用户选择。
:tp为上一个tag标记文件,“:tn”为下一个tag标记文件。当然,若当前tags文件中用户所查找的变量或函数名只有一个,“:tp,:tn”命令不可用。
更多信息参考后文 ctags的使用
vim中的查找
输入:/keyword 回车
n下一个匹配, N上一个匹配
vim 高亮当前光标下的关键字
* 寻找光标所在处的单词word(全字匹配)。直接输入*号即可. n/N:向下/上遍历高亮的结果
g* 模糊匹配当前光标所在地方的单词
据说还有 mark.vim插件. 没试过.
取消高亮输入:nohl
vim书签mark的功能 回到上次编辑的位置
:marks 得知目前所有書籤的列表
mx x 代表 26 個小寫英文字母,這樣游標所在處就會被 mark。
`x 回到書籤原設定位置。` 是 backward quote,就是 Tab 鍵上面那一個。
小写字母书签 只作用於單一檔案內。
大写字母书签 可作用於編輯中之各檔案間。
数字书签 可作用於前次編輯的十個檔案。
数字的用法比较特殊,'0 是回到前一次編輯檔案中離開前的最後位置,'1 則是回到前二次編輯檔案的最後位置,依此類推。您不必使用 m 來標示,vim 會自動記憶。很玄吧!其實這是 viminfo 的功能,您要認真追究的話,請 :h viminfo-file-marks。viminfo 關掉,就沒這個功能了!
所謂前次指的是前次啟動的 vim。
vim中的替换 :%s/10.3.3.3/10.6.207.119/cg 等价于: :1,$s/10.6.207.2119/10.6.207.119/cg 将全部出现的 "10.3.3.3" 替换为 10.6.207.119, 并且替换每一个进行提示确认是否替换. 语法 :[range]substitute/from/to/[option] 在[range]指定范围,将“from”替换成“to”;substitute可简写为s 如 :1,10s/first/second/ 将1到10行的first替换为second
:%s/first/second/
% 表示范围是全文
上句表示全文每行首个匹配“first”的替换成“second”
s默认每行首个匹配“first”的替换成“second”
要全文替换,命令为
:%s/first/second/g
其中%表示所有行,g表示对于每一行进行操作
(!!!暂时发现 不用g也会全局替换, 即是一行中出现两个目标, 两个目标都会被替换.)
对于要匹配的字符串中有特殊字符,需要反斜线/进行转义(这部分涉及到元字符,正则表达式),例如
用 /tau 替换 /lambda
s///tau///lambda
[option] : 表示操作类型
如:g 表示全局替换;
c 表示进行确认
vim中的替换模式
rx 把但前光标位置的字母替换为x。 也就是点击r进入替换模式。
这样省的每次都先进入插入模式把东西先删除掉再插入。
vim中删除
dd删除一个行,x删除一个字符,这些都很常用的啦
d$删除当前到行尾 dw删除当前单词
注意:
$总是代表着行尾。
g代表着文件开头或结尾 gg文件开头 G文件结尾
再配合着下面“光标快速移动一节”的0,^可以做很多灵活的删除
撤销和重做
u撤销(undo),.重做redo
批量注释以及反注释
ctrl+v 之后,然后按j或者k,选择要注释的多行(也可以按上下箭头键,但是有些情况下不起作用),然后按 I (注意大写的i),进入插入模式,然后写下//,然后按下ESC即可。
如
what
how
就会变成
//what
//how
反注释怎么办呢?更简单了,同样Ctrl+v进入列选择模式,移到光标把注释符选中,按下d,OK了吧?!
vim显示/隐藏行号
:set nu 或者 :set number
不显示行号
:set nonu
vim拷贝模式 vim下粘贴东西是往往每行都多出个tab的文章偏移的问题
copy的时候 :set paste, 进入copy模式 :set nopaste改回来
vim正用呢死机了,输不了东西,没反应
按下 ctrl+q.即可
因为不小心按到了 ctrl+s 锁屏了,
vim多标签浏览
vim 从 vim7 开始加入了多标签切换的功能, 相当于多窗口.
用法
:tabnew [++opt选项] [+cmd] 文件 建立对指定文件新的tab
标准模式下:
gt , gT 可以直接在tab之间切换。
不常用:
:tabc 关闭当前的tab // nemo comment:可用:q退出即可。
:tabo 关闭所有其他的tab
:tabs 查看所有打开的tab
:tabp 前一个
:tabn 后一个
vim多子窗口浏览
常用的:
:qa! 退出全部窗口
Ctrl-w 方向键 或 hjkl键在各个视窗之间切换
Ctrl-w Ctrl-w 在窗口之间循环切换
Ctrl-w o 即 :only! 使游標所在之視窗,成為目前唯一顯示的視窗
不常用的:
Ctrl-w n 即 :new。開一空的新視窗。
Ctrl-w s/v 即 :水平或垂直分割窗口
Ctrl-w q 即 :q 結束分割出來的視窗。
垂直分割窗口,并且打开当前文件夹树
:vsplit .
当然也可是
水平分割窗口,并且打开当前文件夹树
:split .
当然也可是
调整窗口大小
CTRL-W = 使得所有窗口 (几乎) 等宽、等高,
但当前窗口使用 'winheight' 和 'winwidth'。
CTRL-W < 使得当前窗口宽度减 N (默认值是 1)。
CTRL-W > 使得当前窗口宽度加 N (默认值是 1)。
CTRL-W - 使得当前窗口高度减 N (默认值是 1)。
CTRL-W + 使得当前窗口高度加 N (默认值是 1)。
调整窗口位置
<整个窗口的移动>
CTRL-W-H 将窗口移到最左边
CTRL-W-L 将窗口移到最右边
CTRL-W-J 将窗口移到底端
CTRL-W-K 将窗口移到顶端
更多窗口操作
http://liaochengcn.blog.163.com/blog/static/17021133620104270817822/
vim文件浏览 File Explorer 资源管理器 文件列表树
安装 winmanager
:WMToggle 调出文件列表树窗口
:ctrl+w然后方向键,在不同窗口间切换, 或者直接ctrl+ww(两个w)切换
下载以及安装:http://www.vim.org/scripts/script.php?script_id=1440
下载bz2, 解压开是个*.vba, 拷贝到 ./vim/plugin, 进入到plugin目录, 用vim打开这个*.vim文件, 运行:so %
即可.
参考:http://hi.baidu.com/phps/blog/item/1bf9bb09105711266a60fb7a.html
去掉讨厌的 >---
11 "set list
12 "set listchars=tab:>-,trail:-
vim智能单词提示 智能补全
或者直接