VI 操作技巧

1,如何在文档中插入另一个文档
:r <filename>

2,如何把编辑的文档转换成html
:TOhtml

3,如何调用外部程序,并把输出的结果定向到一个新的文档中
:split +enew | r ! <command>

4,如何在文档中用一个单词替换不同的单词(一次替换多个字符串)
:%s/word1/|word2/|word3/newword/g      #全文替换
:s/word1/|word2/|word3/newword/g       #光标所在行替换

5,如何得到文件的16进制编码
:%!xxd
可以用
:%!xxd 来还原

6,显示不可见的字符
:set list 
:set nolist

7,删除,复制,...到指定的位置
先指定位置
m<char-set>   #作上标记
d<char-set>   #删从光标到指定的位置
y<char-set>   #复制

8,如果却掉用gvim打开事的~文件
:set nobackup 
当然也可以把这一句加到~/.vimrc文件中

9,如何在插入模式下,进行命令模式下的操作
:<Ctrl+o> 

10,如何统一缩进的格式
indent -kr -i8n <input-file>
其中的8是要缩进的半字节数

11,删除包含特定单词的行
:g/word/d
思考一下g命令的其他的用法

12,如何按一个键注释一行,一段...
map <F2> ^i/*<ESC>$a*/<ESC>    #这样按下<F2>就可以注释掉一行了
发散开来,如何按一个(几个)键来删除/修改/匹配/补全...一行,一段等
:h map

13,如何注释掉多行(有多种方法)
1) sed -e 'n,m s/^/#/g' <filename> > <outputfile>
2) 


14,如何删除{}等括号里的行
:di{
:diB

15,关闭打开的多个缓冲区中的一个
:[N] bw
N是第几个缓冲区,更加详细的情况请见:
:h bw

16,不退出insert模式,而对文本进行操作
:<C-O> dFa   #删除到字母a的文本

17,向打开的文件列表中加入新文件
:args <Ctrl+R>% file1 file2 <Enter>
思考: 如何从列表中删除文件

18,//回车后下一行的起始处自动添加 //
/*回车后,下一行的起始处自动添加* 
:set fo=r        #添加
:set fo-=r       #取消


19,如何去掉windows下留下的^M字符
:%s/^M$//

20,如何把光标移到函数的末尾
][

21,在函数之间跳转的快捷方式
[[  用来跳到光标前面的一个函数开始处。
    如果光标在函数体内的话,那就是所在函数的开始处。
][  用来跳到光标后面的一个函数结尾处。
    如果光标在函数体内的话,那就是所在函数的结尾处。
]]  用来跳到光标后面的一个函数开始处。
    如果光标在函数体内的话,那就是下一个函数的开始处。
[]  用来跳到光标前面的一个函数结尾处。
    如果光标在函数体内的话,那就是上一个函数的结尾处。


----------page 66----------

22,自动缩进的选项
set autoindent
set cindent

23,如何查看组合键的映射值
:h function_key

24,搜索高亮显示
:h hlsearch
:h nohlsearch

25,一个供参考的.vimrc
贴个vimrc供参考

set tabstop=2
set number
set autoindent
set tabstop=4
set tabstop=4
set shiftwidth=4
set incsearch
set encoding=gb2312
set fileencodings=ucs-bom,utf-8,gb2312,big5,latin1
set fileencoding=gb2312
set termencoding=gb2312
set background=dark


26,自动补全括号
:iab ( ()
详细信息请阅读:h iab


27,如何删除所有的偶数行
<ESC>;ggqajddq10000@a
假设你的文本有不到 20000 行,那么输入以上的命令就可以删除所有的偶数行。
详解:h q ; h a; h @a

28,如何隔两行插入一个空格
ggqajo<ESC>;jq1000@a
详解: :h q   :h a  :h @a

29,
如果文件格式:
1-01......
1-02.............
1-03..
2-01.....
2-02....
.
.
.
在vim中如何实现:

1-01......1-01
1-02.............1-02
1-03..1-03
2-01.....2-01
2-02....2-02
.
.
.

: %s//(/d/+-/d/+/)/(.*/)$//1/2/1/

30,绕行设置wrap
:h wrap

31,匹配一个单词
//<word/>

32,文件编码的乱码问题
:h encoding
:h fileencoding=utf-8


33,原帖由 "weismart" 发表:
我是想在vi中对同一行不同位置的逗号做不同的替换
行1、“kk,789,中国人,日本鬼,美国佬"
行2、“test,鸡,鸭蛋,臭屁,7788“
行3、等等
对第一行这个串,我想把第一个“,”换成“‘,”,
第二个逗号换成..........

:%s//(.*/),/(.*/),/(.*/),//1/',/2/',/3/'/g

34,自动缩进的空格数设定
:h shiftwidth

35,一次注释多行
ctrl+v

//
<Esc>

36,怎么才能让vi把.sqc的文件用c的语法高亮呢?当然在打开后可以用
set filetype=c..........

在.vimrc中加入
au BufNewFile,BufRead *.sqc,*.sqf   setf c

37,sbuffer



38,
简单总结一下modeline:

1、适用场合
    当你想对某个文件进行特殊的设置而又不想影响其它文件,因此并不打算在
    .vimrc里面修改这些设置的时候。
   
2、modeline有两种格式:
   (1)第一种格式:

[Copy to clipboard] [ - ]
CODE:
    [text]{white}{vi:|vim:|ex:}[white]{options}
   
    [text]          随便什么文本,或者空白。
    {white}         至少一个空格或tab。
    {vi:|vim:|ex:}  后面三个字符串之一,"vi:", "vim:" 或 "ex:"。
    [white]         可有也可无的空格。
    {options}       被set的选项列表,用冒号':'分隔。

举例:
           vi:noai:sw=3 ts=6
           /* vim:tabstop=8:expandtabs:shiftwidth=8 */
           
    (2)第二种格式:

[Copy to clipboard] [ - ]
CODE:
    [text]{white}{vi:|vim:|ex:}[white]set {options}:[text]

    [text]          随便什么本文,或者空白。
    {white}         至少一个空格或tab。
    {vi:|vim:|ex:}  后面三个字符串之一,"vi:", "vim:" or "ex:"。
    [white]         可有也可无的空格。
    set             字符串"set " (注意set后面的那个空格不可少)。
    {options}       选项列表,用空格分开。
    :               一个冒号。
    [text]          随便什么文本,或者空白。

举例:
        /* vim: set ai tw=75: */
        /* vim: set shiftwidth=4 autoindent : */
        
3、注意:
   vi:或vim:或ex:前面的那个空格不可少,这可以最大限度地避免误判。但,
   vi:和vim:可以直接放在行首,而ex:不行。
   
4、带版本的modeline:
   用法一目了然,所用数字为实际版本号乘以100。
        vim600:      版本大于等于6.0
        vim<600:     版本小于6.0
        vim=600:     版本等于6.0
        vim>;600:     版本大于6.0
        
5、两种格式的区别:
   对于第一种格式,一旦识别,该行剩余部分都将被使用,因此,这样的写法
   /* vi:ts=4: */
   将因为后面的*/而出错。
   而采用第二种格式就没有这个问题了,因为它将显式地以一个冒号结束。
   /* vi:set ts=4: */
   
6、modeline写在哪儿?
   vim只会在一个文件的前modelines行和后modelines行中寻找modeline命令
   模式,modelines的默认值是5。
   
7、modeline的开关是什么?
   开:set modeline
   关:set nomodeline
   事实上,set modelines=0 的效果和set nomodeline是一样的。

39,替换掉文件中的M控制字符

:%s/^M/回车/g

这里的^M是Ctrl + v 之后再Ctrl + m ;
这里的回车是Ctrl + v 之后再回车。


40,删除括号中的内容{},[],()
di} 或 di]  只删除括号中间的内容
da} 或 da]  连括号一起删除
diB

详解: man d

41,vsp 分割窗口后调整窗口的大小

详解: :h vsp

42, 插入换行
1,2,3,

s/,/, /g

43,如何进行快速粘贴

yM
yH
yL


*查看所有的影射的键值
:h function_key


*如何把文件反转
:g/^/m0

小结 : 
(1)使用了g命令 
(2)使用了m : move 命令 
试想把现在的每一行都移动到文档的第一行,整个文件会怎么样。
思考:我们可以用g命令来对某些特定的行做上表记,也可以反转这些行;我们可以利用可以利用m命令来移动任意的文本,和任意位置的文本,对于我们编辑文本来说十分的方便。

*------------------------vim中寄存器的使用-------------------------
:h q
:h @

在编辑文件时我们时常会有一些重复的操作,这时就可以使用寄存器。其用法如下:
q{0-9a-z".=*}    #按下q再按下{}号中的数字或字母
......一系列操作
q
N@{0-9a-z".=*} #按下n一个数值键,用来表示你想要你以前的操作执行多少次。最后一个字符是你第一次按下的键。

-----------------------------end----------------------------------

*vim中的文档排版命令
:[range]ce
:[range]ri
:[range]le

*vim大小写的变化(以下均为按键)
一个字符大小写: ~
一个单词变大小写: g~w
一行变大小写: g~g~
高亮选择的范围:{visual}~ 
高亮选中范围全变大写:{visual}U
高亮选中范围全变小写:{visual}u
当前行全变大写:gUU / gUgU
当前行全变小写:guu / gugu

*去掉$符号
%s//n//g

---------------------------查找相关---------------------------------
*在实用/匹配时忽略大小写
//cab   #这里将匹配ab AB Ab aB 等

*匹配多个模式
//cthis /| that  #匹配this或that 忽略大小写

-----------------------------end----------------------------------

 

*删除文件中的空行?

::g/^[[:blank:]]*$/d

 

posted @ 2013-08-13 23:23  凌少  阅读(654)  评论(0编辑  收藏  举报