分类: C/C++
2011-01-16 18:28:22
1、* (super star)
向下查找光标下(或附近)的
2、C-R (magic insert)
在insert模式下,C-R (register) 插入register里的内容,一个有趣的reg是"=".
假设你想输入123K的具体字节数,不用打开计算器,试试这个“
“125952”就出来了!
另外在命令行里C-R C-W和C-R C-A是必用的技巧,它们将光标下的
考到命令行里,省了你无数的typing。
3、[I (fast grep )
[I显示文件中包含光标下
还有很多相关的命令::h include-search
4、iw, aw, ib, i], i} ... 都非常有用!看help吧
:h object-select
5、%
%用来匹配块,
如果你的光标在类似([{}])
或者#ifdef #else #endif上
%将把光标跳转到相应的匹配符号上去,
%还可以用来指定命令范围,
如果你想把一个
{
..
...
}的块全部删除。
可以先把光标移到{ 再敲d%
类似的,
如果你想把一个块全部往里缩进一个tab
可以把光标移到 { 敲>%
6、=
=是用来缩进的假设你已经在.vimrc里
设置了你的缩进格式,
你就可以用=来缩进你的代码了
=%就是缩进一个块。
7、正则表达式
正则表达式大家都清楚,
我主要讲个一般人不太用,
但很有用的表达,
例如你想把所有的"..."形式的串替换成'...'的形式
但引号里的内容不变
你就可以用
%s/"\(.*\)"/'\1'/来做
上面这个正则表达式"\(.*\)"里 \用来表示()是元字符
第一个在括号里的被匹配的串就可以被\1来代表, 以后依次是\2 \3。
顺便说一句,我到现在还不
知道怎么限制vim里正则表达匹配的贪婪算法。
------------------------------------
里面说的非贪婪匹配是 \{-},
也就是 %s/"\(.\{-}\)"/'\1'/g
8、fx
x 表示任何一个字符。
这是最快的在一行种移动的方法了。然后用
; (分号)
继续移动。
反向移动好像是 t ,但是我记性不好,
总是记不住,于是
0fx
用 0 先回到行首,在 f
9、任何一个操作命令在加一个移动命令。实现对某个范围的操作。
例如
dfx
表示删除到下一个出现 x 的地方, x 可以使任意字符。
操作命令有 d (cut), y(copy) , p(paste), v (select)
移动命令有 hjkl, f, /, gg, G
10、任何命令组合都可以先按一些 数字健 表示重复操作。
如:
d123j
删除下面123行。
11、C-x C-p
在写程序 abc.h 的时候
写道 #include "abc.h" 的时候
其实可以
#include "a
90% 的情况,可以自动补全文件名称。
12、
:r !ls
可以读取当前目录的文件列表。
如果你对 bash 很熟悉的话,这个功能非常好用
例如
输入
case 1
case 2
....
case 1000:
的方法是
:r !for ((i=0;i<100;i++));do echo "case $i" ; done
13、利用外部命令处理文字。
我在 ~/.vimrc 中写了一行。
map = ggVG:!indent -nut -st -kr 2>/dev/null
我按一个 = ,就可以利用外部命令 indent 美化 我的 c 程序。
我认为,
还可以用外部命令排序
例如
用 v 选定要排序的区域
然后按一个叹号。
:'<,'>!sort
14、我在 ~/.vimrc 中写了
map
map
map
就可以用 左右方向健来切换 buffer
F4 关闭 buffer 了。
15、
我在 ~/.vimrc 中写了
runtime ftplugin/man.vim
就可以在把光标停在一个函数上,然后用
\k
查看在线帮助了。
用
:Man getuid
查看 getuid 函数的手册了。
16、:make
可以用外部命令 make 编译工程。
:cw
查看出错信息,
:cn
:cp
在出错信息之间跳转。
17、
~ - 将光标下的字母改变大小写 3~ - 将下3行的字母改变其大小写 g~~ - 改变当前行字母的大小写 U - 将可视模式下的字母全改成大写字母 gUU - 将当前行的字母改成大写 u - 将可视模式下的字母全改成小写 guu - 将当前行的字母全改成小写 gUaw - 将光标下的单词改成大写。 guaw - 将光标下的单词改成小写。
18、
To mark one or more positions in a file, use the m[ark] command.
Examples:
ma - set current cursor location as mark a
'a - jump to beginning of line of mark a
`a - jump to postition of mark a
d'a - delete from current line to line of mark a
d`a - delete from current cursor position to mark a
c'a - change text from current line to line of mark a
y`a - yank text to unnamed buffer from cursor to mark a
:marks - list all the current marks
NB: Lowercase marks (a-z) are valid within one file. Uppercase marks
(A-Z), also called file marks, are valid between files.
For a detailed description of the m[ark] command refer to
:help mark
See also:
:help various-motions
19、
vim *.c :argdo %s/oldvalue/newvalue/ge | update
20、
在一打开的全部缓冲区内搜索并替换一个string。
把下面的函数放到配置文件中
function AllBuffers(cmnd) let cmnd = a:cmnd let i = 1 while (i <= bufnr("$")) if bufexists(i) execute "buffer" i execute cmnd endif let i = i+1 endwhile endfun ":call AllBuffers("%s/foo/bar/ge|update")在命令模式执行:
:call AllBuffers("%s/string1/string2/g") 21、 ctags的跳转: 局部变量就不能用ctrl+]跳转,一定要用gd的 22、对ACE进行ctags: ctags -R --c++-kinds=+p --fields=+iaS --extra=+q --langmap=c++:+.inl -f ace /usr/include/ace/ #fields: #a Access (or export) of class members #i Inheritance information #S Signature of routine (e.g. prototype or parameter list) #extra: # Include an extra class-qualified tag entry for each tag which is a member of a class #For C++, it is in the form "class::member"; for Eiffel and Java, it is in the form "class.member". #--c-kinds #--c++-kinds: #Specifies a list of language-specific kinds of tags #其中的flag来自using the --list-kinds option #As an example for the C language, in order to add prototypes and external variable declarations to the default set of tag kinds, but exclude macros, use --c-kinds=+px-d; to include only tags for functions, use --c-kinds=f #语言列表来自--list-languages #When parsing a C++ member function definition (e.g. "class‐ Name::function"), ctags cannot determine whether the scope specifier is a class name or a namespace specifier and always lists it as a class name in the scope portion of the extension fields. Also, if a C++ function is defined outside of the class declaration (the usual case), the access specification (i.e. public, protected, or private) and implementation information (e.g. virtual, pure virtual) con‐ tained in the function declaration are not known when the tag is generated for the function definition. It will, however be available for prototypes (e.g --c++-kinds=+p). 23、ctags 一个包的全部头文件,比如ncurses pkgfile -l ncurses|egrep -i "include/.+h$"|awk 'sub($1,"")'|xargs ctags -R -L- -f ncurses 24、 ctags的g,ctrl+]s速度不及ctrl+],好自斟酌 25、
#!/bin/sh
find . -name "*.h" -o -name "*.c" -o -name "*.cc" > cscope.files
cscope -bkq -i cscope.files
ctags -R Or you can : pkgfile -l glib2|egrep -i "include/.+h$"|awk 'sub($1,"")' > cscope.files
cscope -bkq -i cscope.files
ctags -R
chinaunix网友2011-03-08 12:54:26
很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com
chinaunix网友2011-03-08 12:53:59
很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com