vim 相关技巧

vim 相关技巧
生成tags 使用 ctags -R R的意思是目录历遍

ctrl + ] 跳到定义处 (不一定能跳到正确的位置,用g+[列出tags)
Ctrl + o 跳回
ctrl + t 跳回开始

编辑/etc/vim/vimrc
添加
:set tags=/opt/2410/linux-2.6.26/tags

使用gf跳到头文件,vi会在path里面去查找
编辑/etc/vim/vimrc
添加
:set path=/opt/2410/linux-2.6.26/include

gd在文件里面依次查找变量
n 为下一个
shift + n 为上一个

gD跳到变量定义处

不退出vi,直接进查看man手册
shift + k  光标移至想查看的函数处

退回bash
ctrl+z   返回 fg
:sh   返回 ctrl+d or exit (因为是新开了一个bash)

yank操作
“a command (command是对yank a的操作,可以是4dd---删除4行放入yank a里面,3yy ---复制3行到yank a里面, p---粘贴yank a的内容)

mark操作
ma ---设置当前光标为mark a
`a ---跳转到mark a
'a ---跳转到mark a 的行开头

ex的切换
Q
vi 返回
ex中的命令基本上可以在vi的命令模式下可以实现,个人觉得没有什么必要切换,这里列举几个简单的例
子其中几个字符的意义是 %表示文件所有行 $表示文件末尾 #显示行内容 =显示行数 .表示光标行,m表示
move,d表示delete,co,t表示cope,p表示显示

:3,8co10 拷贝3到8行到10行
:20,.m$ 移动从20到当前行到末尾
:12,14p 显示12到14行
:%d 删除所有行
:x save&quit 等同于:wq zz
:1,10w newfile 1到10行写入newfile
:34,$w >> newfile 34到行未加入到newfile尾部
:13r filename 读filename到13行
:n 打开多个文件时,转到下一个文件
:args 显示当前文件
:e filename call for a file,if doesn't exect,creat new
:e# 等效vi的ctrl^,切换文件(%表示当前文件名)
:g/pattern 全局查找并显示包含pattern的line

ab命令
ab x yyy 输入x等效为yyy :ab 查看设置

!
!ls  bash 中ls命令输入vi中
!!commend bash中commend命令处理当前行
!4! 4!! commend bash中commend命令处理当前行到+4行到vi中

set autoindent 
set cindent
autoindent 就是自动缩进的意思,当你在输入状态用回车键插入一个新行,或者在 normal 状态用 o 或者 O 插入一个新行时,autoindent 会自动地将当前行的缩进拷贝到新行,也就是"自动对齐”,当然了,如果你在新行没有输入任何字符,那么这个缩进将自动删除。
cindent 就不同了,它会按照 C 语言的语法,自动地调整缩进的长度,比如,当你输入了半条语句然后回车时,缩进会自动增加一个 TABSTOP 值,当你键入了一个右花括号时,会自动减少一个 TABSTOP 值。

% 在(时输入%,会跳到相应的),同样适用于{,{,<
<< and >> 整行向左或向右移动一个shiftwith

1 shiftwidth

这个是用于程序中自动缩进所使用的空白长度指示的。一般来说为了保持程序的美观,和下面的参数最好一致。同时它也是符号移位长度的制定者。

2 tabstop

定义tab所等同的空格长度,一般来说最好设置成8,因为如果是其它值的话,可能引起文件在打印之类的场合中看起来很别扭。除非你设置了 expandtab模式,也就是把tabs转换成空格,这样的话就不会一起混淆,不过毕竟 制表符为8是最常用最普遍的设置,所以一般还是不要改。

3 softtabstop

如果我们希望改变程序中的缩进怎么办?shiftwidthtabstop不一样的话,你会发现程序比较难看的。这时候,softtabstop就起作用了。可以从vim的说明中看到,一旦设置了softtabstop的值时,你按下tab键,插入的是空格和tab制表符的混合,具体 如何混合取决于你设定的softtabstop,举个例子,如果设 定softtabstop=8, 那么按下tab键,插入的就是正常的一个制表符;如果设定 softtabstop=16,那么插入的就是两个制表符;如果softtabstop=12,那么插入的就是一个制表符加上4个空格;如果 softtabstop=4呢?那么一开始,插入的就是4个空格,此时一旦你再按下一次 tab,这次的四个空格就会和上次的四个空格组合起来变成一个制表符。换句话说,softtabstop是 “逢8空格进1制表符”,前提是你tabstop=8

4 关于expandtab

举个例子,在多人一起开发项目时,为了使代码风格尽量保持一致,一般不允许在代码使用TAB符,而以4个空格代之。我们可以编辑一个文件,包含下面 的内容:
set shiftwidth=4
set expandtab

Vim编辑器的可视化模式下的许多命令都是用来帮助我们高亮显示我们想要的文本的.例如命令aw高亮显示下一个单词.事实他不仅高亮显示这个单词,而且也包括这个单词后的空格.在一开始也许我们会认为这个命令没 有太大的用处.因为w命令可以向前移动一个单词,我们为什么不用这个命令呢?
这是因为当我们执行选择文本的操作时,选中的是从老的光标所在处到新的光标所在处之间的文本.当我们使用命令w来移动文本时,结果是光标置于下一个单词的 第一个字符上.如
果这时我们要执行删除操作,我们命令的执行是不仅删掉了我们要删掉的单词,也同时删除了下一个单词的第一个字符.
aw命令是将光标放在下一个单词的第一个字符的前面.换句话说,我们选中的是下一个单词前面的单词以及空 格,而不是选中的下一个单词.
而另外一个使用aw命令而不使用w命令的原因就是不论光标置于一个单词的哪一个字符上,aw命令都可以选中整个单词,而w命令只是选中当前光标处和这个单词结尾之间的字符.
如果我们仅仅是想选中一个单词我们可以使用iw命令.
我们还可以使用下面的命令来选择文本:
aw        选中一个单词以及其后的空格.
iw        仅仅是选中一个单词.
aW        选中一个WORD以及其后的空格.
iW        仅仅是选中一个WORD
as        选中一个句子以及其后的空格.
is        仅仅选中一个句子.
ap        选中一个段落以及后面的空格.
ip        仅仅是选中一个段落.
a(        在括号所包括的文本内,选择直到括号的文本并包括括号.
i(        与上面的命令相类似,只是不包括括号.
a内的文本,包括
i内的文本,不包括
a[        选择[]内的文本,包括[]
i[        选择[]内的文本,不包括[]
a{        选择{}内的文本,包括{}
i{        选择{}内的文本,不包括{}
在可视化模式下,当我们选中一些文本以后,我们可以用命令o来使用光标移动选中的文本的另一个结尾处.然后我们可能再次执行o命令,来使得光标移动选中文 本的另一个结尾处,也就我们来的地方.
而O命令可以在块可视化模式下将光标移动选中文本的另一角.换句话说,O命令是将光标移动选中文本中的同一行的结尾处.
在可视化模式下选中的文本,我们可以用命令~来实现大小写的转换.而U命令是使得选中的文本变成大写的形式,而u命令是将选中的文本变为小写的形式.
我们可以在可视化模式下选中文本,然后用命令J将这些选中的行合并为一行,并用空格来分隔这些行.如果我们希望在合并以并没有空格来分隔,我们可以用命令 gJ.
我们可以用命令gq来格式化可视化模式下选中的文本.

整行补全                        CTRL-X CTRL-L
根据当前文件里关键字补全 CTRL-X CTRL-N
根据字典补全 CTRL-X CTRL-K
根据同义词字典补全 CTRL-X CTRL-T
根据头文件内关键字补全 CTRL-X CTRL-I
根据标签补全 CTRL-X CTRL-]
补全文件名 CTRL-X CTRL-F
补全宏定义 CTRL-X CTRL-D
补全vim命令 CTRL-X CTRL-V
用户自定义补全方式 CTRL-X CTRL-U
拼写建议 CTRL-X CTRL-S
c智能补全                   CTRL-X CTRL-O 

cscope
  • -R: 在生成索引文件时,搜索子目录树中的代码
  • -b: 只生成索引文件,不进入cscope的界面
  • -q: 生成cscope.in.out和cscope.po.out文件,加快cscope的索引速度
  • -k: 在生成索引文件时,不搜索/usr/include目录
  • -i: 如果保存文件列表的文件名不是cscope.files时,需要加此选项告诉cscope到哪儿去找源文件列表。可以使用”-“,表示由标准输入获得文件列表。
  • -Idir: 在-I选项指出的目录中查找头文件
  • -u: 扫描所有文件,重新生成交叉索引文件
  • -C: 在搜索时忽略大小写
  • -Ppath: 在以相对路径表示的文件前加上的path,这样,你不用切换到你数据库文件所在的目录也可以使用它了。

  • s: 查找C语言符号,即查找函数名、宏、枚举值等出现的地方
  • g: 查找函数、宏、枚举等定义的位置,类似ctags所提供的功能
  • d: 查找本函数调用的函数
  • c: 查找调用本函数的函数
  • t: 查找指定的字符串
  • e: 查找egrep模式,相当于egrep功能,但查找速度快多了
  • f: 查找并打开文件,类似vim的find功能
  • i: 查找包含本文件的文件
vim显示中文

set encoding=utf-8
set fileencoding=chinese
set fileencodings=ucs-bom,utf-8,chinese
set ambiwidth=double
posted @ 2011-04-15 14:47  Charliee  阅读(638)  评论(0编辑  收藏  举报