Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1438832
  • 博文数量: 704
  • 博客积分: 10140
  • 博客等级: 上将
  • 技术积分: 6230
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-15 20:41
文章分类

全部博文(704)

文章存档

2013年(1)

2012年(16)

2011年(536)

2010年(151)

分类: C/C++

2011-01-16 18:28:22

1、* (super star)
向下查找光标下(或附近)的。向上找用#。g*查找则不限制whole word。

2、C-R (magic insert)
在insert模式下,C-R (register) 插入register里的内容,一个有趣的reg是"=".
假设你想输入123K的具体字节数,不用打开计算器,试试这个“=1024*123”,
“125952”就出来了!
另外在命令行里C-R C-W和C-R C-A是必用的技巧,它们将光标下的
考到命令行里,省了你无数的typing。

3、[I (fast grep )
[I显示文件中包含光标下的所有行。我常用来浏览某个id在程序中的引用情况。
还有很多相关的命令::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/nullG

我按一个 = ,就可以利用外部命令 indent 美化 我的 c 程序。
我认为,
还可以用外部命令排序
例如
用 v 选定要排序的区域
然后按一个叹号。
:'<,'>!sort

14、我在 ~/.vimrc 中写了
map :bp
map :bn
map :bd

就可以用 左右方向健来切换 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
阅读(435) | 评论(2) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2011-03-08 12:54:26

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com

chinaunix网友2011-03-08 12:53:59

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com