- SecureCRT设成gbk编码(option->session option->appearance -> character encoding选default)
- 在/root/.vimrc中添加一行 set fileencodings=utf8-bom,ucs-bom,utf-8,cp936,gb18030,ucs,big5
- 在/root/.bashrc中添加一行export LC_ALL=zh_CN.GBK
2010年11月10日星期三
vim : SecureCRT 中文问题
SecureCRT下,vim查看utf8的文件中文显示乱码、vim下删汉字一次只删半个
2009年6月30日星期二
vim : JavaScript 配置
代码整理:
jsbeautify.vim
语法:
JavaScript syntax : Better JavaScrirpt syntax support
缩进:
Javascript Indentation : Indentation for Javascript
vim-javascript
检查:
安装JavaScript Lint程序,使用javaScriptLint.vim插件,配置参考 Integrating JavaScript lint with vim
代码压缩解压:
packer(js),jsPacker.pl(Perl)
jsbeautify.vim
语法:
JavaScript syntax : Better JavaScrirpt syntax support
缩进:
Javascript Indentation : Indentation for Javascript
vim-javascript
检查:
安装JavaScript Lint程序,使用javaScriptLint.vim插件,配置参考 Integrating JavaScript lint with vim
代码压缩解压:
packer(js),jsPacker.pl(Perl)
jsPacker.pl -i some.js -o some-pack.js -e 10 -fs
2008年12月25日星期四
Vim : 使用ack做grep
ack干的是grep的活,又比grep好用^^。
但是光用set grepprg=ack不是很爽,可以按Ack and Vim integration这里可以配置一下:
function! Ack(args) let grepprg_bak=&grepprg set grepprg=ack\ -H\ --nocolor\ --nogroup execute "silent! grep " . a:args botright copen let &grepprg=grepprg_bak endfunction command! -nargs=* -complete=file Ack call Ack(<q-args>)
搞好之后就可以用 :Ack keyword * 这样查了,而且quickfix窗口会自己跳出来,可以:cn跳来跳去。原来的grepprg还是不变。
quickfix参考:使用VIM开发软件项目 - (11) 剑不离手:quickfix
2008年12月20日星期六
Vim Plugin 插件 : 代码补全
现在用neocomplcache+vim-snippets
- autocomplpop和neocomplcache是让候选的补全项自动蹦出来,打多一点字后还会继续自动过滤。感觉neocomplcache更顺手一点。
- OmniCppComplete需要ctags支持,面向对象编程时敲.或者->时自动出来对应类的候选项。
- supertab是让你在插入模式下摁tab键进行代码补全,选择的时候就不停的tab。
- snipMate或snippetsEmu是代码块自动完成,关键字后加tab就行了,块内跳转也是tab。
word两边加括号或引号
装surround及repeat两个plugin
假设
当前行内容为
abc <q>def</q>
光标在a处
假设
当前行内容为
abc <q>def</q>
光标在a处
ysw' #加单引号变成'abc' cs'<q> #换成<q>abc</q> dst #删除标签,恢复成abc ysw<q> #重新变成<q>abc</q> cst" #换成"abc" fd #光标移到f处 . #换成双引号的"def"
Vim : snippetsEmu与set paste
snippetsEmu是Vim自动插入代码块的插件,极其十分非常的--好用。
用法见:在 Vim 上使用 Slippery Snippet ( Textmate-Like )
如果~/.vimrc里set paste的话,snippetsEmu就不能用了,tab不出来。
用法见:在 Vim 上使用 Slippery Snippet ( Textmate-Like )
如果~/.vimrc里set paste的话,snippetsEmu就不能用了,tab不出来。
2008年11月16日星期日
vi improved : 内置的几种寄存器,例如 ""、"0、"* 等等
" 未命名的默认寄存器
0 存放上一次复制内容的寄存器
/ 存放上一次搜索内容的寄存器
* 存放鼠标选定内容的寄存器,或说是剪贴板内容吧~
= 表达式寄存器(可以用来做+-*/四则运算),比如"=3*4p就会把12放上去
0 存放上一次复制内容的寄存器
/ 存放上一次搜索内容的寄存器
* 存放鼠标选定内容的寄存器,或说是剪贴板内容吧~
= 表达式寄存器(可以用来做+-*/四则运算),比如"=3*4p就会把12放上去
2008年7月11日星期五
Vim:用ScreenShot将code转html时中文被转成16进制码的问题
ScreenShot常用的两个命令:
- ScreenShot:把当前屏幕内容转成HTML
- Text2Html:把整个文件转成HTML
我这边用ScreenShot将code转html时存在中文被转成16进制码的问题。
需要改掉ScreenShot.vim中的两行中文才正常, ScreenShot.Chinese.patch内容如下:
--- ScreenShot.vim 2008-07-11 20:54:41.454722328 +0000
+++ ScreenShot.vim.orig 2008-06-29 01:55:32.000000000 +0000
@@ -890,8 +890,8 @@
let diff = &tabstop - xx%&tabstop
let char = strpart(listChars.tab,0,1).repeat(strpart(listChars.tab,1),
diff-1)
else
+ let id = s:synIDSpec(y,x,hlID('SpecialKey'))
if char2nr(char) < 0x100
- let id = s:synIDSpec(y,x,hlID('SpecialKey'))
if uhex
let diff = 4
let char = char == "\n"?'<00>':printf('<%02x>',char2nr(char))
@@ -914,7 +914,7 @@
endif
else
let diff = 6
- "let char = printf('<%04x>',char2nr(char))
+ let char = printf('<%04x>',char2nr(char))
endif
endif
else
+++ ScreenShot.vim.orig 2008-06-29 01:55:32.000000000 +0000
@@ -890,8 +890,8 @@
let diff = &tabstop - xx%&tabstop
let char = strpart(listChars.tab,0,1).repeat(strpart(listChars.tab,1),
diff-1)
else
+ let id = s:synIDSpec(y,x,hlID('SpecialKey'))
if char2nr(char) < 0x100
- let id = s:synIDSpec(y,x,hlID('SpecialKey'))
if uhex
let diff = 4
let char = char == "\n"?'<00>':printf('<%02x>',char2nr(char))
@@ -914,7 +914,7 @@
endif
else
let diff = 6
- "let char = printf('<%04x>',char2nr(char))
+ let char = printf('<%04x>',char2nr(char))
endif
endif
else
说明:
- let id = s:synIDSpec(y,x,hlID('SpecialKey'))这行会把中文内容搞成特殊关键字高亮,看着一块一块的,超不爽。
- let char = printf('<%04x>',char2nr(char))这行会把中文换成16进制码,第一次转出来当场无语。
2008年3月18日星期二
Vim : vi improved 笔记
配置注记 Customizing the Editor
可以在文件末尾搞一行
/* vim: set expandtabs : */
用vim编辑该文件的时候会自动读入为临时的配置。
set paste一般可以在粘贴的时候格式正常点。
:set pastetoggle= 设置paste选项切换的按键为F12。
:set wildignore=*.o,*.bak设置通配符匹配时忽略.o跟.bak类型的文件。
一些:命令Complete Command-Mode (:) Commands
:/beach/+1, /seashore/-1 delete 删除/beach/跟/seashore/之间夹的所有行。
:1,3 copy 4 把第1行到第3行的内容拷到第4行之后。
:1,3 move 4 把第1行到第3行的内容移到第4行之后。
:%s/abc/efg/p 后面的p修饰符指示打印出有被修改的行。
:&表示重复上一条:s替换指令。
:&g表示重复上一条:s替换指令,并且修饰符为g。
:@:重复上一条:指令。
:@@重复上一条:@register指令。
:5put a把寄存器a里的内容放到第五行后面。
:5put !a把寄存器a里的内容放到第五行前面。
:100ka在第100行处做标记a。
:normal cwDONE 下一个正常模式的指令。
查看帮助
字符替换
r替换单字符,比如5rz就是从光标处开始把连续5个字符都换成z。
但如果是5r,光标处5个字符只会被替换成一个换行符。
假设abcdefg初始光标在处:
如果是5rz:
azzzzg
如果是5r:
a
g
调用外部程序对文本块进行过滤
就是调用外部程序处理当前文本块,然后用处理后输出的内容替换之前的文本块。
比如:
!10Gsort
就是调用sort排序当前行到第10行的文本块。
!!date
则是将当前行内容替换为外部程序date的输出内容。
分割窗口编辑新文件时顺便找找关键字
:split +/printf three.c
相当于分割出一个新窗口编辑three.c,并将光标定位到其中第一个printf出现的地方。
指定分割窗口的行数
:3 split alpha.c
割出一个高为3行的窗口用于编辑alpha.c。
而split的命令格式为:窗口大小 split +命令 文件名
:count split +command file
查找宏or变量的定义
[CTRL-I, ]CTRL-I
跳到下一个光标所在的词出现的地方,除了当前文件外,#include包含的文件也会进去查。
[CTRL-I是从文件首部开始找
]CTRL-I是从当前光标处开始往下找
gd, gD
gd是查找光标所在的本地变量定义点
gD是查找光标所在的全局变量定义点
]CTRL-D, [CTRL-D
]CTRL-D是查找光标所在的宏的下一个定义点
[CTRL-D是查找光标所在的宏的上一个定义点
]d, [d, ]D, [D
[d是查找光标所在的宏的首个定义点
]d是查找光标所在的宏的下个定义点
[D是从头开始列出光标所在的宏的所有定义
]D是从当前开始列出光标所在的宏的所有定义
查看man手册
假设光标所在的词为mkdir。
K:等价于man mkdir
2K:等价于man 2 mkdir
ascii/16进制/8进制码
正常模式下显示光标所在字符的ascii/16进制/8进制码:
ga
移动文本 Moving Text
将希望移动的文本块首行和末行分别标记为a,b。
光标移到你想放置的新位置上,执行:
:'a,'b move .
以单个词为单位的跳转 Move to the End of a Word
针对words:
w:往前->跳到单词首部
e:往前->跳到单词尾部
b:往后<-跳到单词首部
ge:往后<-跳到单词尾部
还有B,E,gE啥的,主要是针对WORDS
The term word means a string of characters defined by the 'iskeyword' option.The
term WORD means any sequence of non-whitespace characters.
重复单字符搜索
比如用fx查当前行的x字符。
;是往前->继续查
,是往后<-继续查
光标移动记录
:jump查看光标移动记录列表
CTRL-O光标跳转到移动记录列表中上一个位置
光标跳转到移动记录列表中下一个位置
当前窗口光标移动
H:光标移动到当前窗口首行
2H:光标移动到当前窗口第2行
M:光标移动到窗口中部的行
L:光标移动到当前窗口末行
2L:光标移动到当前窗口倒数第2行
滚动窗口
CTRL-Y:往上滚1行
CTRL-E:往下滚1行
CTRL-U:往上滚半屏
CTRL-D:往下滚半屏
CTRL-B:往上滚一屏
CTRL-F:往下滚一屏
调整视窗
z<Enter>将当前行调整为窗口首行,光标移到行中首个非空字符处
zt将当前行调整为窗口首行,光标在行中的位置不变
z-将当前行调整为窗口末行,光标移到行中首个非空字符处
zb将当前行调整为窗口末行,光标在行中的位置不变
z.将当前行调整为窗口正中,光标移到行中首个非空字符处
zz将当前行调整为窗口正中,光标在行中的位置不变
大小写切换
~切换光标处单个字符的大小写
3g~l切换光标开始3个字符的大小写
g~fx切换光标开始直到第一个字符x的大小写
g~~切换整行字符的大小写
gUU整行切换成大写
尽可能少吃字符 Repeating as Little as Possible \{-}
在成功匹配的前提下尽可能少吃字符
例子:
a\{-}与a*相对,a*是尽可能多吃字符
a\{-,5}
a\{-3,5}
本地标记&全局标记
a-z是本地标记,比如在file1某处ma,在file2某处ma,二者是独立的。
A-Z是全局标记,比如在file1某处mA,现在在file2下面'A,就会跑回file1的A标记处。
插入模式下的文本输入
CTRL-U:删除当前行中光标左边<-的所有内容
CTRL-W:删除当前行中光标左边<-的一个词
CTRL-Left:光标移到左边<-最近的一个词
CTRL-Right:光标移到右边->最近的一个词
CTRL-Home:光标移到文件开头
CTRL-End:光标移到文件末尾
CTRL-A:输入上回输入的内容
CTRL-@:输入上回输入的内容,并退出编辑模式
CTRL-Y:输入光标处上一行的字符
CTRL-E:输入光标处下一行的字符
CTRL-R a:输入寄存器a内的内容
CTRL-O dw:转为正常模式执行dw指令,然后返回插入模式
指定=代码格式化时调用的外部程序
:set equalprg=/usr/local/bin/indent
此后调用=时,会用indent整理代码,而不是用vim内置的格式化工具。
可视模式选中内容 Repeating a Visual Selection
gv重复选中上次选中的内容(正常模式也可用)
aw选中下一个词,后面有空格也选上
2aw选中下两个词,后面有空格也选上
iw选中下一个词,后面有空格不算
2iw选中下两个词,后面有空格不算
as/is类似aw/iw,不过是选句子
ap/ip是选段落。
还有a(/a[/a{/a<一堆,类推之
o是使得光标在选中区域的起点和终点间来回切换
O是使得光标在块选中区域中当前行的起点和终点间来回切换
光标位置跳转
CTRL-O:光标跳到列表中上一个位置
CTRL-I:光标跳到列表中下一个位置
设置make调用的程序
gf根据光标所指文件名打开文件
set makeprg=nmake指定输入:make命令时执行nmake
假设当前编辑的文件为file.c
set makeprg=make\ %使得输入:make命令时执行make file.c
set makeprg=make\ %:r.o使得输入:make命令时执行make file.o
文件名相关
% 当前文件名
光标所在处文件名
一些文件名相关的修饰符:
命令批处理 Executing Vim in a Script or Batch File
vim -e -s -c "%s/1/2g" -c "wq" file
vim -es file < script.vim
-e 表示以命令模式执行-c的命令
-s 表示安静执行,不提示信息。
script.vim的内容可以类似:
:%s/aaa/bbb/g
:wq
vim -w script file
vim -W script file
-w表示将编辑file时输入的命令写入script文件,如果script之前内容不为空,则进行内容添加。
-W表示将编辑file时输入的命令写入script文件,如果script之前内容不为空,则进行内容覆盖。
vim -s script file
-s 表示以正常模式执行-w录制得到的script中的命令
注:script中的回车会使光标下移一行
函数跳转
假设已经用ctags -R *.c生成了tags文件。
:tag foo是跳转到foo函数定义处。
:tags是列出已经跳转的路径。
:tag是往前跳,:2tag是往前跳两步。
CTRL-]是往前跳,2CTRL-]是往前跳两步。
CTRL-T是往回跳,2CTRL-T是往回跳两步。
:tag /^foo是跳转到以foo开头的函数定义处(正则匹配)。
:tselect foo是列出名字包含foo的所有函数,列完后会让你挑到底要跳到哪里去。
与tselect结果相关的跳转命令还有trewind,tlast,tnext,tprevious那些。
自动补齐
一般补齐:
CTRL-P往后查找补齐
CTRL-N往前查找补齐
以CTRL-X开始后面再加修饰符的话可以限制补齐的内容:
CTRL-D 宏定义
CTRL-F 文件名
CTRL-K 目录
CTRL-I 当前文件及#include的文件
CTRL-L 一整行
CTRL-] 标签
输入CTRL-X之后还可以用CTRL-Y/CTRL-E把屏幕上下滚一滚。
g CTRL-G可以看当前文件的行,列,单词数,字符数,字节数。
查找宏or变量的定义
[CTRL-I, ]CTRL-I
跳到下一个光标所在的词出现的地方,除了当前文件外,#include包含的文件也会进去查。
[CTRL-I是从文件首部开始找
]CTRL-I是从当前光标处开始往下找
gd, gD
gd是查找光标所在的本地变量定义点
gD是查找光标所在的全局变量定义点
]CTRL-D, [CTRL-D
]CTRL-D是查找光标所在的宏的下一个定义点
[CTRL-D是查找光标所在的宏的上一个定义点
]d, [d, ]D, [D
[d是查找光标所在的宏的首个定义点
]d是查找光标所在的宏的下个定义点
[D是从头开始列出光标所在的宏的所有定义
]D是从当前开始列出光标所在的宏的所有定义
ascii/16进制/8进制码
正常模式下显示光标所在字符的ascii/16进制/8进制码:
ga
移动文本 Moving Text
将希望移动的文本块首行和末行分别标记为a,b。
光标移到你想放置的新位置上,执行:
:'a,'b move .
以单个词为单位的跳转 Move to the End of a Word
针对words:
w:往前->跳到单词首部
e:往前->跳到单词尾部
b:往后<-跳到单词首部
ge:往后<-跳到单词尾部
还有B,E,gE啥的,主要是针对WORDS
The term word means a string of characters defined by the 'iskeyword' option.The
term WORD means any sequence of non-whitespace characters.
重复单字符搜索
比如用fx查当前行的x字符。
;是往前->继续查
,是往后<-继续查
光标移动记录
:jump查看光标移动记录列表
CTRL-O光标跳转到移动记录列表中上一个位置
光标跳转到移动记录列表中下一个位置
当前窗口光标移动
H:光标移动到当前窗口首行
2H:光标移动到当前窗口第2行
M:光标移动到窗口中部的行
L:光标移动到当前窗口末行
2L:光标移动到当前窗口倒数第2行
滚动窗口
CTRL-Y:往上滚1行
CTRL-E:往下滚1行
CTRL-U:往上滚半屏
CTRL-D:往下滚半屏
CTRL-B:往上滚一屏
CTRL-F:往下滚一屏
调整视窗
z<Enter>将当前行调整为窗口首行,光标移到行中首个非空字符处
zt将当前行调整为窗口首行,光标在行中的位置不变
z-将当前行调整为窗口末行,光标移到行中首个非空字符处
zb将当前行调整为窗口末行,光标在行中的位置不变
z.将当前行调整为窗口正中,光标移到行中首个非空字符处
zz将当前行调整为窗口正中,光标在行中的位置不变
大小写切换
~切换光标处单个字符的大小写
3g~l切换光标开始3个字符的大小写
g~fx切换光标开始直到第一个字符x的大小写
g~~切换整行字符的大小写
gUU整行切换成大写
光标移到当前word下一次出现的地方
*
光标移到当前变量或函数定义处
gd
显示当前word的man page
K
生成代码高亮的html文件
vim -c "so syntax/2html.vim|wqa" test.pl
转换所有字符为小写
:%!tr A-Z a-z
当前屏幕跳转
H 跳到屏幕顶部,M 跳到屏幕正中,L 跳到屏幕底部
跨行匹配
\_ 表示允许匹配换行符,\_. 表示匹配任意字符
光标处数字加1
CTRL+A
行内查找
f,F,t,T时,当前所在的字符是不看的。
比如abcdabcdabcd,假设当前光标在第一个b处,敲2fb之后,光标将停在第三个b处。
查看当前光标所在位置
CTRL-G,会返回当前文件名,光标所在行号,列号,总行数等等
滚屏
CTRL-U:上滚半屏,CTRL-D:下滚半屏
编辑多个文件时跳到首个/末个文件
首个文件用:first或:rewind,末个文件用:last
录制宏
假设a为宏名,则以qa开始,中间正常编辑,以q结束录制。以@a调用刚刚录制的宏。 参考:vim 的键盘宏
用d删除文本
d /abc 从光标所在位置开始删除文本,直至出现abc
d fc 从光标所在位置开始删除文本,直至出现字符c,同时c字符也被删除。
d tc 从光标所在位置开始删除文本,直至出现字符c,c字符不会被删除。
已打开文件a后,水平diff继续打开文件b
首先vim a,命令模式下:diffsplit b
cw跟dw的差别
cw:删掉当前的词,不去管这个词后面的空格,进入insert模式。
dw:删掉当前的词,还有这个词后面的所有空格。
输入特殊字符
用:digraphs看字符表,CTRL-K再加上表中映射的键就能出来了。
比如π就可以用CTRL-K-p-*四个键打出来。
文本断行
可以在文件末尾搞一行
/* vim: set expandtabs : */
用vim编辑该文件的时候会自动读入为临时的配置。
set paste一般可以在粘贴的时候格式正常点。
:set pastetoggle= 设置paste选项切换的按键为F12。
:set wildignore=*.o,*.bak设置通配符匹配时忽略.o跟.bak类型的文件。
一些:命令Complete Command-Mode (:) Commands
:/beach/+1, /seashore/-1 delete 删除/beach/跟/seashore/之间夹的所有行。
:1,3 copy 4 把第1行到第3行的内容拷到第4行之后。
:1,3 move 4 把第1行到第3行的内容移到第4行之后。
:%s/abc/efg/p 后面的p修饰符指示打印出有被修改的行。
:&表示重复上一条:s替换指令。
:&g表示重复上一条:s替换指令,并且修饰符为g。
:@:重复上一条:指令。
:@@重复上一条:@register指令。
:5put a把寄存器a里的内容放到第五行后面。
:5put !a把寄存器a里的内容放到第五行前面。
:100ka在第100行处做标记a。
:normal cwDONE 下一个正常模式的指令。
查看帮助

字符替换
r替换单字符,比如5rz就是从光标处开始把连续5个字符都换成z。
但如果是5r,光标处5个字符只会被替换成一个换行符。
假设abcdefg初始光标在处:
如果是5rz:
azzzzg
如果是5r:
a
g
调用外部程序对文本块进行过滤
就是调用外部程序处理当前文本块,然后用处理后输出的内容替换之前的文本块。
比如:
!10Gsort
就是调用sort排序当前行到第10行的文本块。
!!date
则是将当前行内容替换为外部程序date的输出内容。
分割窗口编辑新文件时顺便找找关键字
:split +/printf three.c
相当于分割出一个新窗口编辑three.c,并将光标定位到其中第一个printf出现的地方。
指定分割窗口的行数
:3 split alpha.c
割出一个高为3行的窗口用于编辑alpha.c。
而split的命令格式为:窗口大小 split +命令 文件名
:count split +command file
查找宏or变量的定义
[CTRL-I, ]CTRL-I
跳到下一个光标所在的词出现的地方,除了当前文件外,#include包含的文件也会进去查。
[CTRL-I是从文件首部开始找
]CTRL-I是从当前光标处开始往下找
gd, gD
gd是查找光标所在的本地变量定义点
gD是查找光标所在的全局变量定义点
]CTRL-D, [CTRL-D
]CTRL-D是查找光标所在的宏的下一个定义点
[CTRL-D是查找光标所在的宏的上一个定义点
]d, [d, ]D, [D
[d是查找光标所在的宏的首个定义点
]d是查找光标所在的宏的下个定义点
[D是从头开始列出光标所在的宏的所有定义
]D是从当前开始列出光标所在的宏的所有定义
查看man手册
假设光标所在的词为mkdir。
K:等价于man mkdir
2K:等价于man 2 mkdir
ascii/16进制/8进制码
正常模式下显示光标所在字符的ascii/16进制/8进制码:
ga
移动文本 Moving Text
将希望移动的文本块首行和末行分别标记为a,b。
光标移到你想放置的新位置上,执行:
:'a,'b move .
以单个词为单位的跳转 Move to the End of a Word
针对words:
w:往前->跳到单词首部
e:往前->跳到单词尾部
b:往后<-跳到单词首部
ge:往后<-跳到单词尾部
还有B,E,gE啥的,主要是针对WORDS
The term word means a string of characters defined by the 'iskeyword' option.The
term WORD means any sequence of non-whitespace characters.
重复单字符搜索
比如用fx查当前行的x字符。
;是往前->继续查
,是往后<-继续查
光标移动记录
:jump查看光标移动记录列表
CTRL-O光标跳转到移动记录列表中上一个位置
光标跳转到移动记录列表中下一个位置
当前窗口光标移动
H:光标移动到当前窗口首行
2H:光标移动到当前窗口第2行
M:光标移动到窗口中部的行
L:光标移动到当前窗口末行
2L:光标移动到当前窗口倒数第2行
滚动窗口
CTRL-Y:往上滚1行
CTRL-E:往下滚1行
CTRL-U:往上滚半屏
CTRL-D:往下滚半屏
CTRL-B:往上滚一屏
CTRL-F:往下滚一屏
调整视窗
z<Enter>将当前行调整为窗口首行,光标移到行中首个非空字符处
zt将当前行调整为窗口首行,光标在行中的位置不变
z-将当前行调整为窗口末行,光标移到行中首个非空字符处
zb将当前行调整为窗口末行,光标在行中的位置不变
z.将当前行调整为窗口正中,光标移到行中首个非空字符处
zz将当前行调整为窗口正中,光标在行中的位置不变
大小写切换
~切换光标处单个字符的大小写
3g~l切换光标开始3个字符的大小写
g~fx切换光标开始直到第一个字符x的大小写
g~~切换整行字符的大小写
gUU整行切换成大写
尽可能少吃字符 Repeating as Little as Possible \{-}
在成功匹配的前提下尽可能少吃字符
例子:
a\{-}与a*相对,a*是尽可能多吃字符
a\{-,5}
a\{-3,5}
本地标记&全局标记
a-z是本地标记,比如在file1某处ma,在file2某处ma,二者是独立的。
A-Z是全局标记,比如在file1某处mA,现在在file2下面'A,就会跑回file1的A标记处。
插入模式下的文本输入
CTRL-U:删除当前行中光标左边<-的所有内容
CTRL-W:删除当前行中光标左边<-的一个词
CTRL-Left:光标移到左边<-最近的一个词
CTRL-Right:光标移到右边->最近的一个词
CTRL-Home:光标移到文件开头
CTRL-End:光标移到文件末尾
CTRL-A:输入上回输入的内容
CTRL-@:输入上回输入的内容,并退出编辑模式
CTRL-Y:输入光标处上一行的字符
CTRL-E:输入光标处下一行的字符
CTRL-R a:输入寄存器a内的内容
CTRL-O dw:转为正常模式执行dw指令,然后返回插入模式
指定=代码格式化时调用的外部程序
:set equalprg=/usr/local/bin/indent
此后调用=时,会用indent整理代码,而不是用vim内置的格式化工具。
可视模式选中内容 Repeating a Visual Selection
gv重复选中上次选中的内容(正常模式也可用)
aw选中下一个词,后面有空格也选上
2aw选中下两个词,后面有空格也选上
iw选中下一个词,后面有空格不算
2iw选中下两个词,后面有空格不算
as/is类似aw/iw,不过是选句子
ap/ip是选段落。
还有a(/a[/a{/a<一堆,类推之
o是使得光标在选中区域的起点和终点间来回切换
O是使得光标在块选中区域中当前行的起点和终点间来回切换
光标位置跳转
CTRL-O:光标跳到列表中上一个位置
CTRL-I:光标跳到列表中下一个位置
设置make调用的程序
gf根据光标所指文件名打开文件
set makeprg=nmake指定输入:make命令时执行nmake
假设当前编辑的文件为file.c
set makeprg=make\ %使得输入:make命令时执行make file.c
set makeprg=make\ %:r.o使得输入:make命令时执行make file.o
文件名相关
% 当前文件名
光标所在处文件名
一些文件名相关的修饰符:
:p 将文件名转为绝对路径可以用:echo expand("%:r")测试看看
:~ 将绝对路径转为缩写的版本
:. 在可能的情况下把路径转为当前目录的相对路径
:h 取出目录路径
:t 取出单独的文件名
:r 取出单独的、不含扩展名的文件名
:e 取出文件扩展名
命令批处理 Executing Vim in a Script or Batch File
vim -e -s -c "%s/1/2g" -c "wq" file
vim -es file < script.vim
-e 表示以命令模式执行-c的命令
-s 表示安静执行,不提示信息。
script.vim的内容可以类似:
:%s/aaa/bbb/g
:wq
vim -w script file
vim -W script file
-w表示将编辑file时输入的命令写入script文件,如果script之前内容不为空,则进行内容添加。
-W表示将编辑file时输入的命令写入script文件,如果script之前内容不为空,则进行内容覆盖。
vim -s script file
-s 表示以正常模式执行-w录制得到的script中的命令
注:script中的回车会使光标下移一行
函数跳转
假设已经用ctags -R *.c生成了tags文件。
:tag foo是跳转到foo函数定义处。
:tags是列出已经跳转的路径。
:tag是往前跳,:2tag是往前跳两步。
CTRL-]是往前跳,2CTRL-]是往前跳两步。
CTRL-T是往回跳,2CTRL-T是往回跳两步。
:tag /^foo是跳转到以foo开头的函数定义处(正则匹配)。
:tselect foo是列出名字包含foo的所有函数,列完后会让你挑到底要跳到哪里去。
与tselect结果相关的跳转命令还有trewind,tlast,tnext,tprevious那些。
自动补齐
一般补齐:
CTRL-P往后查找补齐
CTRL-N往前查找补齐
以CTRL-X开始后面再加修饰符的话可以限制补齐的内容:
CTRL-D 宏定义
CTRL-F 文件名
CTRL-K 目录
CTRL-I 当前文件及#include的文件
CTRL-L 一整行
CTRL-] 标签
输入CTRL-X之后还可以用CTRL-Y/CTRL-E把屏幕上下滚一滚。
g CTRL-G可以看当前文件的行,列,单词数,字符数,字节数。
查找宏or变量的定义
[CTRL-I, ]CTRL-I
跳到下一个光标所在的词出现的地方,除了当前文件外,#include包含的文件也会进去查。
[CTRL-I是从文件首部开始找
]CTRL-I是从当前光标处开始往下找
gd, gD
gd是查找光标所在的本地变量定义点
gD是查找光标所在的全局变量定义点
]CTRL-D, [CTRL-D
]CTRL-D是查找光标所在的宏的下一个定义点
[CTRL-D是查找光标所在的宏的上一个定义点
]d, [d, ]D, [D
[d是查找光标所在的宏的首个定义点
]d是查找光标所在的宏的下个定义点
[D是从头开始列出光标所在的宏的所有定义
]D是从当前开始列出光标所在的宏的所有定义
ascii/16进制/8进制码
正常模式下显示光标所在字符的ascii/16进制/8进制码:
ga
移动文本 Moving Text
将希望移动的文本块首行和末行分别标记为a,b。
光标移到你想放置的新位置上,执行:
:'a,'b move .
以单个词为单位的跳转 Move to the End of a Word
针对words:
w:往前->跳到单词首部
e:往前->跳到单词尾部
b:往后<-跳到单词首部
ge:往后<-跳到单词尾部
还有B,E,gE啥的,主要是针对WORDS
The term word means a string of characters defined by the 'iskeyword' option.The
term WORD means any sequence of non-whitespace characters.
重复单字符搜索
比如用fx查当前行的x字符。
;是往前->继续查
,是往后<-继续查
光标移动记录
:jump查看光标移动记录列表
CTRL-O光标跳转到移动记录列表中上一个位置
光标跳转到移动记录列表中下一个位置
当前窗口光标移动
H:光标移动到当前窗口首行
2H:光标移动到当前窗口第2行
M:光标移动到窗口中部的行
L:光标移动到当前窗口末行
2L:光标移动到当前窗口倒数第2行
滚动窗口
CTRL-Y:往上滚1行
CTRL-E:往下滚1行
CTRL-U:往上滚半屏
CTRL-D:往下滚半屏
CTRL-B:往上滚一屏
CTRL-F:往下滚一屏
调整视窗
z<Enter>将当前行调整为窗口首行,光标移到行中首个非空字符处
zt将当前行调整为窗口首行,光标在行中的位置不变
z-将当前行调整为窗口末行,光标移到行中首个非空字符处
zb将当前行调整为窗口末行,光标在行中的位置不变
z.将当前行调整为窗口正中,光标移到行中首个非空字符处
zz将当前行调整为窗口正中,光标在行中的位置不变
大小写切换
~切换光标处单个字符的大小写
3g~l切换光标开始3个字符的大小写
g~fx切换光标开始直到第一个字符x的大小写
g~~切换整行字符的大小写
gUU整行切换成大写
光标移到当前word下一次出现的地方
*
光标移到当前变量或函数定义处
gd
显示当前word的man page
K
生成代码高亮的html文件
vim -c "so syntax/2html.vim|wqa" test.pl
转换所有字符为小写
:%!tr A-Z a-z
当前屏幕跳转
H 跳到屏幕顶部,M 跳到屏幕正中,L 跳到屏幕底部
跨行匹配
\_ 表示允许匹配换行符,\_. 表示匹配任意字符
光标处数字加1
CTRL+A
行内查找
f,F,t,T时,当前所在的字符是不看的。
比如abcdabcdabcd,假设当前光标在第一个b处,敲2fb之后,光标将停在第三个b处。
查看当前光标所在位置
CTRL-G,会返回当前文件名,光标所在行号,列号,总行数等等
滚屏
CTRL-U:上滚半屏,CTRL-D:下滚半屏
编辑多个文件时跳到首个/末个文件
首个文件用:first或:rewind,末个文件用:last
录制宏
假设a为宏名,则以qa开始,中间正常编辑,以q结束录制。以@a调用刚刚录制的宏。 参考:vim 的键盘宏
用d删除文本
d /abc 从光标所在位置开始删除文本,直至出现abc
d fc 从光标所在位置开始删除文本,直至出现字符c,同时c字符也被删除。
d tc 从光标所在位置开始删除文本,直至出现字符c,c字符不会被删除。
已打开文件a后,水平diff继续打开文件b
首先vim a,命令模式下:diffsplit b
cw跟dw的差别
cw:删掉当前的词,不去管这个词后面的空格,进入insert模式。
dw:删掉当前的词,还有这个词后面的所有空格。
输入特殊字符
用:digraphs看字符表,CTRL-K再加上表中映射的键就能出来了。
比如π就可以用CTRL-K-p-*四个键打出来。
文本断行
set textwidth=70 输入时自动在70列断行
gggqG 整理全文
<Visual>gq 整理选中的内容
gggqG 整理全文
<Visual>gq 整理选中的内容
:%s/\%75c/\r 在第75列断行
添加行号
来源:vim 小技巧 : 行數的顯示與利用
:%s/^/\=printf("%*d", 5, line("."))/
看颜色列表,见hacking vim - Changing Color Scheme
To see a complete list of color groups, use the command :
:so $VIMRUNTIME/syntax/hitest.vim
参见match命令,如:
:match ErrorMsg /^Error/
非贪婪模式匹配
Vim里面的 .\{-} 相当于Perl里面的 .*?
其中,\{-} 对应于 *?
ctrl-l或ctrl-r 整理屏幕
ctrl-^ 跳转到上一个文件
:4,8w! 将4-8行内容替换为当前文件的内容
:w >> ~/test.txt 将当前内容添加到~/test.txt中
2+ 往下移两行
:7 到第7行
ctrl-g 显示当前行数、文件总行数
3H 当前屏幕第3行
3L 当前屏幕倒数第3行
z-Enter 把当前行搞到屏幕顶
z.把当前行搞到屏幕正中
z-把当前行搞到屏幕底
:.!date 把当前行的内容替换成date指令输出的内容
:5,8!date 把5-8行的内容替换成date指令输出的内容
:%!date 把当前文件的内容替换成date指令输出的内容
( 上一句
) 下一句
{ 上一段
} 下一段
:%y 把当前文件所有内容拷下来
:g/London/y 把当前文件中含London的行拷下来
跳转到函数开头/末尾
一般可以用 [{ 或 ]} ,也可以加上数字如 3[{ 。
还有其他可用于块跳转:
还有其他可用于块跳转:
- [( 和 ])
- [m 和 ]m
- [M 和 ]M
- [[ 和 ]]
来源:vim 小技巧 : 行數的顯示與利用
yjchou Says:后面的g应该可以省掉:
April 16th, 2007 at 6:36 pm
如果行號想靠右對齊的話,可以用下面這一行 (假設以五個字元對齊)
:%s/^/\=printf("%*d", 5, line("."))/g
:%s/^/\=printf("%*d", 5, line("."))/
看颜色列表,见hacking vim - Changing Color Scheme
To see a complete list of color groups, use the command :
:so $VIMRUNTIME/syntax/hitest.vim
参见match命令,如:
:match ErrorMsg /^Error/
非贪婪模式匹配
Vim里面的 .\{-} 相当于Perl里面的 .*?
其中,\{-} 对应于 *?
ctrl-l或ctrl-r 整理屏幕
ctrl-^ 跳转到上一个文件
:4,8w! 将4-8行内容替换为当前文件的内容
:w >> ~/test.txt 将当前内容添加到~/test.txt中
2+ 往下移两行
:7 到第7行
ctrl-g 显示当前行数、文件总行数
3H 当前屏幕第3行
3L 当前屏幕倒数第3行
z-Enter 把当前行搞到屏幕顶
z.把当前行搞到屏幕正中
z-把当前行搞到屏幕底
:.!date 把当前行的内容替换成date指令输出的内容
:5,8!date 把5-8行的内容替换成date指令输出的内容
:%!date 把当前文件的内容替换成date指令输出的内容
( 上一句
) 下一句
{ 上一段
} 下一段
:%y 把当前文件所有内容拷下来
:g/London/y 把当前文件中含London的行拷下来
Vim Plugin 插件
打开大文件 LargeFile
自动识别打开的中文乱码 fencview.vim
把 fencview.vim 扔到 ~/.vim/plugin 下
在 ~/.vimrc中设置
let g:fencview_autodetect=1
代码注释 The NERD Commenter
用VIM进行Perl开发
参考:http://qiita.com/items/3d186671b361672f1e51
perl-support:perl开发类ide插件
perlomni:Perl语法补全
perl-mauke : 支持5.010版本语法高亮,把perl.vim扔到~/.vim/syntax/底下就行了
玩俄罗斯方块 TeTrIs.vim : A tetris game in pure vim
很无聊就是了,玩了10几分钟。。。
启动:<leader>te。
控制键就是ijkl还有space。
代码折叠
AutoFold.vim,已支持C, Perl, Python, Shell, and Vim filetypes.
用起来不错,省得自己找一堆折叠函数,烦毙。
文件打开速度会变慢。
simplefold.vim
<leader>f进行折叠。
自动识别打开的中文乱码 fencview.vim
把 fencview.vim 扔到 ~/.vim/plugin 下
在 ~/.vimrc中设置
let g:fencview_autodetect=1
代码注释 The NERD Commenter
,cc | 把选中的行注释掉 |
,cn | 把选中的行注释掉,已注释过的行仍继续加注释符 |
,c<space> | 反注释选中的行 |
,c$ | 从光标开始处注释掉当前行 |
,cA | 在当前行结尾处添加注释 |
用VIM进行Perl开发
参考:http://qiita.com/items/3d186671b361672f1e51
perl-support:perl开发类ide插件
perlomni:Perl语法补全
玩俄罗斯方块 TeTrIs.vim : A tetris game in pure vim
很无聊就是了,玩了10几分钟。。。
启动:<leader>te。
控制键就是ijkl还有space。
代码折叠
AutoFold.vim,已支持C, Perl, Python, Shell, and Vim filetypes.
用起来不错,省得自己找一堆折叠函数,烦毙。
文件打开速度会变慢。
simplefold.vim
<leader>f进行折叠。
2008年3月10日星期一
vim : txt2tags 配置
编辑.t2t文件时自动代码高亮。
文件syntax:txt2tags.vim扔到~/.vim/syntax/下边。
命令模式下敲make自动调用txt2tags进行编译。
文件compiler:txt2tags.vim扔到~/.vim/compiler下边。
其中g:txt2tags_executable是用来指定txt2tags程序位置的。
参考页面:
文件syntax:txt2tags.vim扔到~/.vim/syntax/下边。
命令模式下敲make自动调用txt2tags进行编译。
文件compiler:txt2tags.vim扔到~/.vim/compiler下边。
其中g:txt2tags_executable是用来指定txt2tags程序位置的。
augroup txt2tags au! autocmd! BufRead,BufNewFile *.t2t set filetype=txt2tags autocmd FileType txt2tags let g:txt2tags_executable = '/usr/bin/txt2tags' autocmd FileType txt2tags let g:txt2tags_options = "-v" autocmd FileType txt2tags compiler txt2tags augroup END
参考页面:
订阅:
博文 (Atom)