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