在insert模式下,C-R (register)插入register里的内容,一个有趣的reg是"=".
假设你想输入123K的具体字节数,不用打开计算器,试试这个“<C-R>=1024*123<CR>”,
“125952”就出来了!
另外在命令行里C-R C-W和C-RC-A是必用的技巧,它们将光标下的<word>和<WORD>
考到命令行里,省了你无数的typing。
3. C-X (auto complete)
在insert模式下,C-XC-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显示文件中包含光标下<word>的所有行。我常用来浏览某个id在程序中的引用情况。
还有很多相关的命令::h include-search
7. object-select
iw, aw, ib, i], i} ... 都非常有用!看help吧
:h object-select
先写这么多,以后再补充吧。
例如你想把所有的"..."形式的串替换成'...'的形式
但引号里的内容不变
你就可以用
%s/"\(.*\)"/'\1'/来做
上面这个正则表达式"\(.*\)"里 \用来表示()是元字符
第一个在括号里的被匹配的串就可以被\1来代表, 以后依次是\2 \3。
顺便说一句,我到现在还不
知道怎么限制vim里正则表达匹配的贪婪算法。
------------------------------------
里面说的非贪婪匹配是 \{-},
详细
另外 和 perl 正则表达式的区别在 :h perl-patterns
把aaaaa.20300.2000.com 替换为aaaaa.com
我用s/\(^.*)\(\.\d*.\)com/\1.com/
结果为 aaaaa.20300.com
请问有没有好点儿的办法?谢谢
☆─────────────────────────────────────☆
【 在 qiaolin (风儿) 的大作中提到: 】
: 把aaaaa.20300.2000.com 替换为aaaaa.com
:
: 我用s/\(^.*)\(\.\d*.\)com/\1.com/
所以, 得到你要的结果.
可以用\{-}进行非贪婪匹配.
但为什么不直接把数字跟它们的点去掉呢?
s/[0-9.]\+//g
: 结果为 aaaaa.20300.com
: 请问有没有好点儿的办法?谢谢
☆─────────────────────────────────────☆
谢谢大侠,有问题请教:
贪婪匹配的顺序是怎样的呢?
在这个例子中,先匹配第一个pattern,再从最后面的pattern一个一个“吐”出来?
【 在 alphatan ( C ) 的大作中提到: 】
:
:
:
:
:
: 所以, 得到你要的结果.
: 可以用\{-}进行非贪婪匹配.
: 但为什么不直接把数字跟它们的点去掉呢?
: s/[0-9.]\+//g
这里没有这样用是因为aaaaa也可能是a123a,可不可以用/w呢?
在查找、替换命令 使用以下正则表达式元字符,功能强大。
也可用在:g/命令中
& 代表最近匹配串
~ 代表最近替换串
. 任一字符
^ 行首 或 表示 非
$ 行末
\< 词首
\> 词尾
*
\( \)
分
[] 表示选择
- 表示范围 ,例如 [0-9]代表数字,[a-z]代表小写字母 [^0-9a-zA-Z]代表非数字和大小
写字母
\{m,n\} 前面部分的从 m 次 至 n 次出现,m n 为数值
\{m\}
\{m,\}
以下举几例子,欢迎大家提出问题来共同探讨。
1.在20列后插入串
:%s/^.\{20\}/&insert something here/g
2.把C++语言里 //注释 修改为 /* */ 格式
:%s/\/\/\(.*\)$/\/\*\1\*\//g
3.在建存储过程的sql文本里,在每个create procedureprocname()
:%s/^[
\([^(]*\)/drop procedure \1;Ctrl_VCtrl_Mcreate procedure \1/g
----------------
数字加减, CTRL-A, CTRL-X
----------------
vim里自动缩进一段
把光标移动到某个花括号,
按 =% 缩进整段。
把整段不按格式往外缩一个tab
>%
缩两个
>>%
往里缩
<%
注意%匹配很多东西,
如果你想从
#ifdef
缩到
#endif
也可如此
try :help c_CTRL-R
<C-R><C-W>:将光标下的keyword拷贝到命令行缓冲区中
<C-R>*: 从系统剪贴版中拷贝内容
<C-R>=: 表达式求值
<C-R>": 拷贝buffer中的内容
....
<C-D>: 命令和文件提示
常用命令:
------------------------------
c\c++ 下常用的:
------------------------------
插入模式
------------------------------
发信人: sysfree (虫), 信区: VIM
标
发信站: BBS 水木清华站 (Wed Nov 17 14:36:29 2004), 站内
插入模式下有用的键盘命令:
(注意:以下命令都是在插入模式用的,也就是左下角要显示"--Insert--")
CTRL-[ or CTRL-C:退出插入模式。如果嫌<Esc>太费事,可以试试这个。
CTRL-A:插入先前插入过的内容。看起来比较有用,但是飘忽不定,很难把握。
CTRL-N/CTRL-P: 搜索匹配,自动完成单词(超级有用)。
CTRL-R:插入寄存器内容。例如<C-R>*会插入windows剪贴板的内容。:reg命令查看全部寄存器。
CTRL-T/CTRL-D: 将本行缩进/去缩进,无论光标在什么位置
CTRL-Q: 当CTRL-V不能用时,可以试试这个。
CTRL-Y: 输入和上面一行相同的字符。有时候可能用的着。
CTRL-E: 输入和下面一行相同的字符。
CTRL-X: 进入CTRL-X模式。
CTRL-X模式基本上是用来自动完成的。vim的自动完成可以包含当前文件、头文件、tag文件、字典文件等。
CTRL-X模式中的主要命令:
CTRL-X
以上命令都可以再紧跟CTRL-P或CTRL-N,表示继续向前或向后搜索。
例如:按CTRL-XCTRL-L补全了一行,但不是自己想要的,可以继续按CTRL-L查找,也可以按CTRL-P或CTRL-N继续查找。找到后如果再按CTRL-XCTRL-L将会把找到的那一行的下面的行也复制过来,很过瘾吧?
下面两个命令也在CTRL-X模式,但是不属于自动完成:
CTRL-X CTRL-E: 在插入模式下让屏幕往上滚一行
CTRL-X CTRL-Y: 同上,屏幕下滚一行
其它不常用的命令没有列出。欢迎补充。
去掉菜单
去掉工具条
去掉右边的滚动条
去掉下边的滚动条
4 最好的办法,编辑_vimrc.
加入set fileformats=unix,dos,mac
不管什么格式都可以识别了。按说vim可以自动转换的,不知道为什么
要自己加,我的是vim63 windows版。
你想要的是 'cscopequickfix' 这个选项吧?
首先,你要设置 'cscopequickfix' 这个变量,比如
set cscopequickfix=s-,c-,d-,i-,t-,e-
再打开 quickfix 窗口
copen
然后,比如你要找出所有出现 elephant 的地方,可以
cscope find s elephant
所有的结果都显示在 quickfix窗口里面了,可以双击或者回车来选择。
发信人: ann77 (ann), 信区: VIM
标
发信站: BBS 水木清华站 (Wed Jul
我做了一个试验,也许对你有帮助。
VIM和其他编译器一起工作的原理就是把
compiler 的stderr 重定向到一个临时文件中。
然后用 :cfile 打开这个临时文件,
用 errorformat 来解释临时文件的内容。
下面我的具体做法,
我是在 BASH 下。
$for i in * ; do echo "2:$i:$(head -n 1 $i)" ; done > x
生成一个错误文件,内容如下
2:scr:#!/bin/bash
2:screenshell:#!/bin/bash
2:view-data.py:#!/usr/bin/python
2:view-data.sh:#!/bin/bash
2:x:2:scr:#!/bin/bash
每一行的格式就是
行号:文将名称:错误信息。
然后用 vim
:set errorformat=%l:%f:%m
设定 errorformat 的格式, :help errorformat for moreinformation
:cfile x
打开错误文件。
然后就可以想 make 出错的时候一样,打开每一个文件的第2行了。
我认为,你切换到了新的 compiler 后,你要做的事情就是
观察新的 compiler 的错误输出,编写一个新的 errorformat
就行了。
调试的时候,可以
$ make 2>temp-error-file
然后 vim 中
:set errorformat=?????
:cfile tmp-error-file
【 在 Charity (花无缺) 的大作中提到: 】
: 在RH下,我已经习惯了
: GCC + Vim + Make整合使用,
: Vim好像可以直接利用GCC编译器生成的Error List,
: ...................
标
发信站: BBS 水木清华站 (Fri Jul 23 11:03:37 2004), 站内
只要就是颜色高亮引起的, 只要syntax off 或是set filetype=就可以了
这个在打开那些一行xml文件时尤其明显(xml可以set filetype=html)
【 在 thinelephant (严重消化不良) 的大作中提到: 】
:主要是翻页的速度,如果向下一点一点的翻页速度还可以,但是向上翻页或者滚动就很慢,或者跳到文件末也要等一会。退出也要等一会。
: 呵呵,我已经找到解决方案了:只读打开,set compatible,syntaxoff。
: 速度不错,关闭也是瞬间。
: ...................
'd
d 表示0-9的数字,
代表最近打开的文件
发信人: windblown (......), 信区: VIM
标
发信站: BBS 水木清华站 (Tue Dec 14 10:08:39 2004), 站内
用sed吧
sed -e '
:REPEAT
s/\([[:alpha:]]*\) \([0-9]*\),/\1 \2\n\1 /
t REPEAT
' yourfile
【 在 thinelephant (严重消化不良) 的大作中提到: 】
: 每一行都是 \S\+ \(\d\+,\)*\d\+的形式,想把每行的逗号分割的数字展开成多行。
: 例如
: elephant 13,18,19
: ...................
vim 使用的一些小技巧。
:%s/\n/\r---------\r/
vim的列模式。
在命令模式下,按v(orV)可进入可视模式,但是只能按行选择。要进入列模式,使用ctrl+v。
VI是VIsualeditor的意思,ex是他的“不可视”版本。如果多许多文件进行同样的编辑,用vim一个一个弄,就显得很麻烦。这种情况,我们可以采用ex进行自动化处理。例如要把当前目录下所有的html文件编码由big5转换成gb2312,可以执行下面的脚本:
#!/bin/bash
for I in *.html;do
ex - $I<<EOF
:set encoding=big5
:setfileencoding=gb2312
:wq
EOF
done
基于GTK2的gvim在gbk的locale下,菜单和编辑区中文字全乱码,而gb2312和utf-8locale下均正常。解决办法:在自己的home目录下,创建一个.gvimrc文件,其中包括:
set encoding=gb2312
source $VIMRUNTIME/delmenu.vim
source $VIMRUNTIME/menu.vim
其原理似乎也是使用了gb2312的locale。gvim(GTK)本身不支持gbk?
vim具有的fold功能,可以把相连的某些行折叠起来,在需要的时候展开。
选中要折叠的行,zf命令创建一个fold并折叠起来,zr命令展开。z打头的很多命令都和fold操作有关,具体请:helpz
假设你在编辑一篇html文件,可以使用如下命令对它进行排版:
:%!tidy -iq
tidy是一个html/xml格式化工具,同时还具有查错和转换功能。
vim对很多源文件提供彩色显示功能,能否把vim中显示的彩色发布到web上呢?下面的命令能帮你完成。
:TOhtml
使用y命令在vim中复制的时候,可以保存在a-z26个寄存器中,其实还有两个寄存器可以使用:*和+,放置在*寄存器中的文字("*yy),可以通过鼠标中健粘贴到其它程序中,比如mozilla,+号寄存器中的文字("+yy),通过右健菜单中的paste粘贴出来。反之亦然。(这一招学到smth上acura的,在此表示感谢!)
********************************************************************************
件,然后在里面加入一行就可以打开所有的编码的文件了(暗爽):
setfileencodings=ucs-bom,utf-8,cp936,big5,euc-jp,euc-kr,latin1
保存从新起动vim,打开文件ok了。说到这里我感觉vim里面还有一个显示行号和语法高亮是我常用的功能,每次在vim里面输入syntaxon太他吗的烦了,我这种懒人是不能容忍这种事情发生的,算了,往里面在写两行字符,让他打开的时候自动的开启吧:
setnu
syntaxon
这样打开一个源代码文件感觉就比较爽了,效果太好了,不好,这么正规的软件代码也有bug,我改改,去除那个bugsection,我自己往里面写,输入代码,可是怎么不会自动缩进呀,这让我们这些人怎么能够忍受呀,好了,听说有个vim给写好的配置文件,是推荐的,拷贝了直接使用,估计就可以了,在终端输入命令一条吧。
cp /etc/vim/vimrc /usr/share/vim/vim63/vimrc_example.vim
好了,就这样从新打开 vim,一切 ok 了,如果能有鼠标控制,有 menu就更好了,我们继续添加,不就是网 .vimrc 里面加己行字吗,呵呵:
setmouse=a
set wildmenu
这样就差不多了,基本上可以满足一般人的需求了,可是我这种程序源的话可能在读源代码的时候会经常的在多个文件中间转换,如果每次都退出在用vim打开的话很麻烦的,怎么办,分屏打开多个文件,这个可以,使用:new命令就可以,可以分屏的,但是我的可是15的显示器,分分还有什么呀,还是想个其他的方法吧,能不能用一个简单的命令在不退出vim的情况下来回转换呀,答案是肯定的,伟大的vim什么做不到呀。还是在.vimrc里面加入几句话,不过这才麻烦点,呵呵
else
endif
保 存重新打开 vim,然后用 vim打开一个源代码文件,在正常模式下输入,e就会有一个框出来,上面罗列了当前目录下的所有文件,你用 tab建来选择打开那个文件,太爽了。基本上 vim的东西就这些了,还有的就是一些汉化的了,我在 linuxfans.org下载了vim 的中文文档,解压安装了,使用的不错
vim设置自动格式化文本:
源码:--------------------------------------------------------------------------------
:set formatoptions=croamq
********************************************************************************
具体的可以help看帮助
讨论到的自动缩进是 autoindent
主要是 c 代码等
拷贝粘贴
于是就可以 set noautoindent 解决
或者设置 set paste
具体 vim 网站有 Tips
Tip #330: how to stop auto indenting
http://www.vim.org/tips/tip.php?tip_id=330
********************************************************************************
摘要:vim的一个有趣的用法
如果想在vim里面达到这个效果,在vimrc中加入一下两行:
au BufWinEnter *. exe 'set list listchars=tab:\|\ '
au BufWinEnter *. exe 'command Seetab :set list listchars=tab:\|\'
当你编程序时, 就会达到这个效果.源自:http://www.vim.org/tips/tip.php?tip_id=460
用法:
当你不想看到对齐线时 在vim的normal模式下 :set nolist
如果你想看到对齐线时 在vim的normal模式下 :Seetab
在我们谈起Vim编辑器似乎只是觉得他只是一个类似于一个命令行方式的文本编辑器。而事实上不是这样的。Vim在窗口环境中也可以完美的完成我们的工作。在窗口环境下,我们不仅可以使用那些在Vim文本方式下的命令来完成工作,而且还有许多的菜单和其他的选项。这些都使得我们可以完美的来完成我们的工作。
我 们要启动图形界面的Vim可以用下面的命令:gvimfile。这样就可以打开图形界面来编辑文本file。图形界面下的Vim编辑器的外观因你所用的操作系统的不同而有所不同,就是同样的操作系统也会因你所使用的工具集不同(Motif,Athena,GTK)而会呈现不同的外观。而值得向大家推荐的是GTK版本的Vim编辑器,当然其他版本的也是可以来完美的完成我们的工作的。
在Windows系统中我们可以在标准形式下用鼠标来选择文本,而在XWindow系统中我们也会有一个标准的系统来使用鼠标,但是这两种标准是不同的。然而比较幸运的是我们可以定制我们的Vim编辑器。我们可以使得我们的Vim中的鼠标的行为看起来像是XWindow系统中的鼠标的行为。下面的命令是设置鼠标的行为为XWindow风格的鼠标行为::behavexterm。而下面的命令则是使得鼠标的行为是Windows风格的行为::behavemswin。在UNIX和Linux系统中的鼠标风格是xterm风格,而在Windows中的鼠标风格是在安装过程中选择的。为了控制鼠标的行为,命令:behave有以下这些选项:
Option
'selectmode'
'mousemodel'
'keymodel'
'selection'
xterm的鼠标风格的行为主要有以下一些:
左键:
拉动左键:
右键:
中键:
Windows的鼠标风格的行为主要有以下一些:
左键:
拉动左键:
<S-LeftMouse>
<S-RightMouse>
中键:
(注:其中的S为Shift键)
其他的一些特殊的用法:
Shift+左键:
Shift+右键:
Ctrl+左键:
Ctrl+右键:
在图形界面的Vim编辑器还有一个有趣的特征,那就是当我们点开一个菜单时就会发在子菜单的第一行有一条虚线,点击此虚线就可以将这个菜单移其他的地方。关闭后Vim的菜单结构又恢复到正常的状态了。在GTK版本和Windows版本中的图形界面的Vim还有一个工具栏,这些工具可以快速的完成我们的工作。