GVIM_使用

  • 格式:doc
  • 大小:81.00 KB
  • 文档页数:14

在insert模式下,C-R (register) 插入register里的内容,一个有趣的reg是"=".

假设你想输入123K的具体字节数,不用打开计算器,试试这个“=1024*123”,

“125952”就出来了!

另外在命令行里C-R C-W和C-R C-A是必用的技巧,它们将光标下的和

考到命令行里,省了你无数的typing。

3. C-X (auto complete)

在insert模式下,C-X C-P/N/L/F等自动完成前面的词、行、文件名等,是编程时必用的

命令。其中C-P和C-N可以不用C-X。

4. [p & ]p (smart paste)

paste同时自动根据目标行的缩进调整来源行的缩进。在copy代码段的时候非常有用。

5. C-O (fast out, fast in)

在insert模式下,用C-O后可以执行一个normal命令,然后立即返回insert模式,省去了

用ESC的麻烦。

6. [I (fast grep )

[I显示文件中包含光标下的所有行。我常用来浏览某个id在程序中的引用情况。

还有很多相关的命令::h include-search

7. object-select

iw, aw, ib, i], i} ... 都非常有用!看help吧

:h object-select

先写这么多,以后再补充吧。

例如你想把所有的"..."形式的串替换成'...'的形式

但引号里的内容不变

你就可以用

%s/"\(.*\)"/'\1'/来做

上面这个正则表达式"\(.*\)"里 \用来表示()是元字符

第一个在括号里的被匹配的串就可以被\1来代表, 以后依次是\2 \3。

顺便说一句,我到现在还不

知道怎么限制vim里正则表达匹配的贪婪算法。

------------------------------------

里面说的非贪婪匹配是 \{-},

也就是 %s/"\(.\{-}\)"/'\1'/g

\ 太多了可以用 \v,

%s/\v"(.{-})"/'\1'/g

详细

:h /\{-

:h \v

另外 和 perl 正则表达式的区别在 :h perl-patterns

把 替换为

~字符 ~~~~~数字和点

我用s/\(^.*)\(\.\d*.\)com/\/

结果为

请问有没有好点儿的办法?谢谢

☆─────────────────────────────────────☆

alphatan ( C ) 于 (Tue Aug 10 09:27:19 2004) 提到: 【 在 qiaolin (风儿) 的大作中提到: 】

: 把 替换为

: ~字符 ~~~~~数字和点

: 我用s/\(^.*)\(\.\d*.\)com/\/

1. \(^.*\) 一下子把整个字符串吞进去了. \1 =

2. 遇到com把 com从\1中吐出来. \1 = aaaaa.20300.2000.

3. 遇到.把com前面的\.吐出来 \1 = aaaaa.20300.2000

4. 遇到\d*, 再把随后的2000吐出来 \1 = aaaaa.20300.

5. 遇到\., 把.也呕出来了. \1 = aaaaa.20300

所以, 得到你要的结果.

可以用\{-}进行非贪婪匹配.

但为什么不直接把数字跟它们的点去掉呢?

s/[0-9.]\ //g

: 结果为

: 请问有没有好点儿的办法?谢谢

☆─────────────────────────────────────☆

qiaolin (风儿) 于 (Tue Aug 10 09:36:27 2004) 提到:

谢谢大侠,有问题请教:

贪婪匹配的顺序是怎样的呢?

在这个例子中,先匹配第一个pattern,再从最后面的pattern一个一个“吐”出来?

【 在 alphatan ( C ) 的大作中提到: 】

: 1. \(^.*\) 一下子把整个字符串吞进去了. \1 =

: 2. 遇到com把 com从\1中吐出来. \1 = aaaaa.20300.2000.

: 3. 遇到.把com前面的\.吐出来 \1 = aaaaa.20300.2000

: 4. 遇到\d*, 再把随后的2000吐出来 \1 = aaaaa.20300.

: 5. 遇到\., 把.也呕出来了. \1 = aaaaa.20300

: 所以, 得到你要的结果.

: 可以用\{-}进行非贪婪匹配.

: 但为什么不直接把数字跟它们的点去掉呢?

: s/[0-9.]\ //g

这里没有这样用是因为aaaaa也可能是a123a,可不可以用/w呢?

在查找、替换命令 使用以下正则表达式元字符,功能强大。

也可用在:g/命令中

& 代表最近匹配串

~ 代表最近替换串

. 任一字符

^ 行首 或 表示 非

$ 行末

\ 词尾

* 0次或多次

\( \) 分节指定与其中正则式匹配的部分,在替换时候可以用 \1 \2 \3 ... 引用匹配部

[] 表示选择

- 表示范围 ,例如 [0-9]代表数字,[a-z]代表小写字母 [^0-9a-zA-Z] 代表非数字和大小 写字母

\{m,n\} 前面部分的从 m 次 至 n 次出现,m n 为数值

\{m\} 精确m次出现

\{m,\} 大于等于m次出现

以下举几例子,欢迎大家提出问题来共同探讨。

1.在20列后插入串

:%s/^.\{20\}/&insert something here/g

2.把C 语言里 //注释 修改为 /* */ 格式

:%s/\/\/\(.*\)$/\/\*\1\*\//g

3.在建存储过程的sql文本里,在每个create procedure procname()

前加上drop procedure procname ; [ ]里输入的是一个空格和TAB键。

:%s/^[ ]*[cC][rR][eE][Aa][tT][eE][ ]*[pP][Rr][oO][cC][eE][dD][uU][rR][eE][ ]*

\([^(]*\)/drop procedure \1;Ctrl_VCtrl_Mcreate procedure \1/g

----------------

数字加减, CTRL-A, CTRL-X

----------------

vim里自动缩进一段

把光标移动到某个花括号,

按 =% 缩进整段。

把整段不按格式往外缩一个tab

>%

缩两个

>>%

往里缩

: 将光标下的keyword拷贝到命令行缓冲区中

*: 从系统剪贴版中拷贝内容

=: 表达式求值

": 拷贝buffer中的内容

....

: 命令和文件提示

常用命令:

------------------------------

CTRL-Z vim 切换到后台

:g/xxx 列出所有含 xxx 的行; 适合想到含 xxx 的某行, 但不知道行号,

/xxx 又太慢

q: q/ q? 编辑长命令时比较舒服, 执行按回车, 按 CTRL-C 再次进入

: / ? 原来的输入状态, 再按一次关闭.

CTRL-W= 所有窗口等高, 适合 diff 时自己移动了 window 大小

CTRL-Wo 等效于 :only

CTRL-Wc 等效于 :close!

gvim -u 用 NONE 的话必须大写, 可以用 nul 文件, gvim -u nul, 而且不

区分大小写

-s 执行脚本文件, 是 normal 时的指令, cmd 的命令要 :, 但不用加

-w 把所有按键记录 appedn 到指定文件中 -W overwrite

这 2 个适合不会 perl sed 的 vimer

--servername

--remote-silent 这 2 个搭配着用, 可以总在一个 vim 里打开新文件, 比如

gvim.exe --servername smarter --remote-silent test.text

命令太长, 可以自己 alias 一下(win32 下用 doskey 就可以)

再次选中 上次选中的内容, 用 gv

在选中的区域首尾跳动, 用 大写 O

:redi 把输出信息重定向, 比如 保存所有 set 选项到 剪切板

:redi @*

:se all

具体 :h redi

c\c 下常用的:

------------------------------

[[

]] 在 C 的 {} 形成的段落中移动 (在第一列 { 之间跳动,

一次一个函数,一个结构或类的定义)

[# 和 ]# 在 #if #else #endif 的上下位置间移动

[{ ]}

[( ])

[/ ]/ 在注释 /* */ 间移动

这样在这些块的中间位置, 就能迅速到块头和块尾

如果已经在这些行上, 如果不是到对应点,

会到上一级范围, 如 { 上按 [{ 到上一级

]} 则到对应点

(vim 里常用 [ 表示 "向上",

] 表示 "向下",

比如上面的例子, 以及 [i ]i, diff 时候的 [c ]c 等)

% 在 () {} [] #ifdef #endif /* */之间跳转

可以 :so $VIMRUNTIME/macros/matchit.vim

这样可以在 if endif 之间使用

对 1 个块的操作, 具体 :h v_a

里面的 iX aX 什么的都很好用

ctags 用 -a 附加新 tags 到 ctags 文件后

--- 对 c

--- ctags -R --c-types= px d:\mingw\include (etags)

--- 因为 ctags 确省不把函数声明作为 tag

--- 对 c

--- ctags -R --language-force=c --c -types= px --verbose --extra= q

extra= q 用来增加生成 Class::member 的形式, 默认没有

这样就可以用 :ts CView::OnDraw 这种形式看

--- 因为 c 一些头文件不用 .h 所以要用 --language-force

--- 对 java

--- ctags -R --languages=java c:/jdk131/src