vim 使用技巧

http://blog.163.com/xychenbaihu@yeah/blog/static/1322296552010111293855626/

跳到开始结尾处

 gg:将光标移动到文件的开始位置。

 G: 将光标移动到文件的最后一行。

行号+G可定位到指定的行上,g/要找的词,可显示所有含有要找的词的行号和内容。

跳到某一行

1、对当前行做标记,例如ma,即标记当前行为a行,mb,即标记当前行为b行,mc等等。

要回到a行使用'a。要回到b行使用'b

2、在命令行中输入:number+enter就可以将光标移动到指定的行

跳到变量函数定义处

      gd变量函数定义处

跳到头文件

gf跳到头文件定义处  ctl + ^  返回

源码对齐

            gg + = +G

//先gg跳转到文件开始位置,再输入=,再输入G,vim将自动进行C和C++源码的对齐操作。

自动补全

在linux下编写c语言程序,命名规范要求变量名,函数名是用“_”将单词分隔开的。

比如:

int    value_name = 5;

采用这种方法的好处在于vim进行匹配时,比较方便。

在vim中使用ctrl+n    或  ctrl+p进行匹配。

当输入value_使用ctrl+n或者ctrl+p能够将后面的部分自动匹配。

以实验一下,那种方式更适合我们。

vim复制:

     复制字符串:

              ctrl+v配合“上下左右”键,选中字符串,使用y进行复制。

    复制n个单词:

             y+number+w

    复制一行:

             yy

    复制n行:

             nyy

    复制一块:

           ctrl+v    配合“上下左右”键,选中指定块,使用y进行复制(有一定的局限性,复制的宽度受任意一行宽度的影响,准确的的说复制的是块,是一个矩形)。

 不知复制多少行:

  shift + v 配合“上下”键,使用y可以复制多行 

vim粘贴:

       在vim中使用p 或 P进行粘贴。

命令行模式下粘贴

按下ctrl+r,命令行上会出现一个冒号",此时输入对应的寄存器就行了。

删除/移动/复制

命令模式,无:输入。dd为删除光标行,d+数字 回车删除当前行开始的数字+1行。

在:输入d数字,则为删除当前行开始的数字行。

:m数字,把当前行移动到数字行处,只一行。

:co数字,把当前行COPY到数字行之后,数字可以用+来表示位移几行。比如:co+2就是把当前行COPY到当前行号+2行后。

:行号1,行号2 co行号3 ,把行号1到行号2之间的内容复制到行号3后面,co换成m就是移动多行。

如果不是整行的比如把第5行的某个字符后到10行某个字符前的内复制到12行某个字符前,可以这样做:

1, 光标移到第5行的你想复制的那个字符前。

2, 按下 v.

3, 按向下键(或J)到了第10行时, 按向左键,移到你想复制的字符后。然后按下 y

4, 最后移光标到第12行的某个字符前按下p  

vim删除:

     字符及字符串的删除:

      删除一个字符,使用x。

      删除多个字符,使用ctrl+v进入可视模式,然后移动键盘上的“上下左右”键,将要删除的字符串选中,然后使用d就删除了。

      行及多行,块的删除:

      删除一行,使用dd;

      删除n行,使用ndd;

      删除不知道多少行,首先使用ctrl+v进入可视模式,然后移动键盘上的“上下左右”键,将要删除的行选中,然后使用d就删除了。

vim撤销:

      vim中的撤销有两种,一种是向左撤销,一种是向右撤销。比如我们刚删除了一行,想将其回复,使用u就可以,恢复后又想删除,使用ctrl+r就可以。 

另外一半符号匹配

     在vim中使用%可以匹配另外一半符号出现的位置。 

   当我们将光标放在第一个大括号哪里,想找到另外一个与之匹配的大括号时,使用%。就可以了。

多标签

标签页操作

建立多标签页:tab split

标签页切换gt

新建标签:tabnew

多窗口-屏幕分割

备注:^W为在一般模式下直接按 ctr + w,不用输“:”

水平切割^Ws

垂直切割^Wv

关闭当前窗口^Wc

窗口切换

  切换到左窗口^Wh

  切换到右窗口^Wl

  切换到上窗口^Wk

  切换到下窗口^Wj

  (使用^w + 方向键也行的)

窗口移动

  当前窗口左移^WH

  当前窗口右移^WL

  当前窗口上移^WK

  当前窗口下移^WJ 

窗口大小

  最大高度^W_

  最小高度^W1_

  最大宽度^W|

  最小宽度^W1|

屏幕切割

水平切割:

:split

:split xxx(要打开的文件名)

:new(在新窗口创建文件)

<CTRL+W> k:跳转到上面的窗口 (若为大写K,则是把当前窗口调至上方)

<CTRL+W> j:跳转到下面的窗口 (类似于上)

垂直切割:

:vsplit

:vsplit xxx(要打开的文件名)

:vnew(在新窗口创建文件)

:only        取消分屏

<CTRL+W> h:跳转到左边的窗口 (若为大写H,则是把当前窗口调至左方)

<CTRL+W> l:跳转到右边的窗口 (类似于上)

<CTRL+W> w:在窗口之间跳转

<CTRL+W> +:扩大窗口 (或在当前窗口位置,输入命令:res +9)

<CTRL+W> -:缩小窗口

在一个窗口下,打开3个文件。

先 打开一个,vim 文件名 (记住一定是vim啊!)

然后在vi的命令输入状态下输入

:sp 另外一个文件的路径及文件名

如此就可以在一个窗口打开3个文件了。

可以使用 ctrl + 两次按 w

在3个文件中切换

常见模式

普通模式

在普通模式中,用户可以执行一般的编辑器命令,比如移动光标,删除文本等等。这也是Vim启动后的默认模式。这正好和许多新用户期待的操作方式相反(大多数编辑器默认模式为插入模式)。

插入模式

在这个模式中,大多数按键都会向文本缓冲中插入文本。大多数新用户希望文本编辑器编辑过程中一直保持这个模式。

在插入模式中,可以按ESC键回到普通模式。

可视模式

这个模式与普通模式比较相似。但是移动命令会扩大高亮的文本区域。高亮区域可以是字符、行或者是一块文本。当执行一个非移动命令时,命令会被执行到这块高亮的区域上。Vim的"文本对象"也能和移动命令一样用在这个模式中。

命令行模式

在命令行模式中可以输入会被解释成并执行的文本。例如执行命令(":"键),搜索("/"和"?"键)或者过滤命令("!"键)。在命令执行之后,Vim返回到命令行模式之前的模式,通常是普通模式。

进入插入模式

i    insert,光标前插入

I    行首插入

a    append,光标后插入

A    行末插入

o    当前行下面添加新空白行

O    当前行上面添加新空白行

移动光标

  k

h    l    

  j

Backspace  Space  左/右移一格

b    w    左/右移一字

e         移动到字尾

0    $    行首/尾

Return      下一行行首

选中文本

在正常模式下(按ESC进入)按键v进入可视化模式,然后按键盘左右键或h,l键即可实现文本的选择。

其它相关命令:

v:按字符选择。经常使用的模式,所以亲自尝试一下它。

V:按行选择。这在你想拷贝或者移动很多行的文本的时候特别有用。

CTRL+v:按块选择。非常强大,只在很少的编辑器中才有这样的功能。你可以选择一个矩形块,并且在这个矩形里面的文本会被高亮。

vim查找:

a、查找第几行,在命令行中输入:number+enter就可以将光标移动到指定的行。

 b、查找某个字符串,在命令行中输入:/string,光标就移动到第一个出现string的行,当输入n,光标将移动到下一处出现string的行,再输入n,将继续向下找,当找到最后一个string所出现的行,再输出n时,就回到第一次出现string的行。

  (/string查找指定字符串,n从开始向结束,即向下。N从结束向开始,即向上)

当在命令行输入:/string时,光标将移动到最后一个出现string的行,当输入N,光标将移动到最后一次出现string的行,继续输入N,将继续向上一次出现string的行移动。

字符替换

如果要将vim里的一个a字符改成c ——讲光标移到a处,然后按r放开后再按c。

交换位置

交换两个相邻字母的位置:按x然后按p (剪切再粘贴)

查找替换

下面转自:http://www.nonozone.net/vim-model-commonly-used-in-the-replacement-summary.html

1,简单替换表达式

替换命令可以在全文中用一个单词替换另一个单词:

:%s/four/4/g

“%” 范围前缀表示在所有行中执行替换。最后的 “g” 标记表示替换行中的所有匹配点。如果仅仅对当前行进行操作,那么只要去掉%即可

  如果你有一个象 “thirtyfour” 这样的单词,上面的命令会出错。这种情况下,这个单词会被替换成”thirty4″。要解决这个问题,用 “<” 来指定匹配单词开头:

       :%s/<four/4/g

显然,这样在处理 “fourty” 的时候还是会出错。用 “>” 来解决这个问题:

       :%s/<four>/4/g

如果你在编码,你可能只想替换注释中的 “four”,而保留代码中的。由于这很难指定,可以在替换命令中加一个 “c” 标记,这样,Vim 会在每次替换前提示你:

       :%s/<four>/4/gc

2,删除多余的空格

要删除这些每行后面多余的空格,可以执行如下命令:

       :%s/s+$//

命令前面指明范围是 “%”,所以这会作用于整个文件。”substitute” 命令的匹配模式是

“s+$”。这表示行末($)前的一个或者多个(+)空格(s)。替换命令的 “to” 部分是空的:”//”。这样就会删除那些匹配的空白字符。

3,匹配重复性模式

星号项 “*” 规定在它前面的项可以重复任意次。因此:

       /a*

匹配 “a”,”aa”,”aaa”,等等。但也匹配 “” (空字串),因为零次也包含在内。星号 “*” 仅仅应用于那个紧邻在它前面的项。因此 “ab*” 匹配 “a”,”ab”,”abb”,”abbb”,等等。如要多次重复整个字符串,那么该字符串必须被组成一个项。组成一项的方法就是在它前面加 “(”,后面加 “)”。因此这个命令:

       /(ab)*

匹配: “ab”,”abab”,”ababab”,等等。而且也匹配 “”。

要避免匹配空字串,使用 “+”。这表示前面一项可以被匹配一次或多次。

       /ab+

匹配 “ab”,”abb”,”abbb”,等等。它不匹配 后面没有跟随 “b” 的 “a”。

要匹配一个可选项,用 “=”。 例如:

       /folders=

匹配 “folder” 和 “folders”。

4,指定重复次数

要匹配某一项的特定次数重复,使用 “{n,m}” 这样的形式。其中 “n” 和 “m” 都是数字。在它前面的那个项将被重复 “n” 到 “m” 次 (|inclusive| 包含 “n” 和 “m”)。例如:

       /ab{3,5}

匹配 “abbb”,”abbbb” 以及 “abbbbb”。

  当 “n” 省略时,被默认为零。当 “m” 省略时,被默认为无限大。当 “,m” 省略时,就表示重复正好 “n” 次。例如:

       模式          匹配次数

       {,4}           0,1,2,3 或 4

       {3,}           3,4,5,等等

       {0,1}          0 或 1,同 =

       {0,}           0 或 更多,同 *

       {1,}           1 或 更多,同 +

       {3}            3

5,多选一匹配

在一个查找模式中,”或” 运算符是 “|”。例如:

       /foo|bar

这个命令匹配了 “foo” 或 “bar”。更多的抉择可以连在后面:

       /one|two|three

匹配 “one”,”two” 或 “three”。

  如要匹配其多次重复,那么整个抉择结构须置于 “(” 和 “)” 之间:

       /(foo|bar)+

这个命令匹配 “foo”,”foobar”,”foofoo”,”barfoobar”,等等。

  再举个例子:

       /end(if|while|for)

这个命令匹配 “endif”,”endwhile” 和 “endfor”。

6,指定单位替换

:行号1,行号2s/替换前/替换后/g,替换指定行号1和行号2之间的内容。

如果替换时需确认那么在g后加个c参数。这样每一个替换前都需要确认

命令组合

目前用vim感觉到最爽的地方,特别是t/f,如从光标开始向后删除到字符'}' -> dt},从光标开始向前删除到字符'{' -> dt{

http://blog.csdn.net/iamduoluo/article/details/7430637

安装vim包:  

sudo apt-get install vim

普通用户到超级用户的切换: 

sudo su

退出超级用户:

ctrl+d  或者exit

vim有三种常用模式:普通模式(默认)、编辑模式、命令行模式。

普通模式到编辑模式:i   退回普通模式:esc按键(escape)

普通模式到命令行模式用:(冒号)   退回普通模式:esc按键(escape)

:w  ——内存中的东西写入到磁盘。相当于保存

:q  ——退出编辑器vim

:wq  ——保存,退出

vim的基本操作

dd  ——删除一行

cc  ——修改一行

d 2 w  ——从光标所在处开始,删除两个单词

dG  ——从光标所在处,一直删除到结尾

u  ——撤销(undo)

:h  ——vimhelp

:bd  ——bufferdelete:删除缓冲区,关闭帮助内容

:h bd  ——查看关于bd的解释文档 bdhelp

在help文档里面,当光标移动到链接(如tutor)的地点时,用ctrl+右方括号 打开链接;用ctrl+o关闭链接。

vimtutor ——bash命令,vim教程

粘贴和复制:

shift+v  ——选中光标所在行

按j、k选中多行

d  ——剪切

y  ——(yank)复制,原来的文本保留

p  ——(past)粘贴

在一个文件里打开两个文件:

:vnew  ——竖着打开两个文件

:new  ——横着打开两个文件

:bd  ——光标光标所在的文件

ctrl+ww  ——光标在窗口间切换

关闭vim的快捷键:shift+zz  相当于:wq!

在vim中用 / woed  ——查找

n  ——查找下一处

N  ——查找上一处

:3  ——跳转到第三行

u  ——撤销undo

ctrl+r ——返回 redo

vim的配置操作:

set nu  ——显示行号

set nonu  ——取消显示行号

set ai  ——自动缩进(auto indent)

set noai  ——取消自动缩进

map <tab>:bn<cr>  ——按下tab执行:bd的功能:影像

这些设置都可以写到一个配置文件里,成为默认的规则。在/home/shsf/.vimrc  里面进行配置。在.vimrc(隐藏文件)里面双引号表示注释

关于:bn  ——已经用vim打开了文件a。命令行里面输入:e  (编辑)或者:o(打开)另一个文件。这样用:bn切换缓冲去。用来在两个文件的切换显示。:bd只关闭当前缓冲区而:wq是关闭vim。

vim的插入模式的快捷键

       ctrl+n  ——联想补齐一个单词(这个单词在本文件中已经出现过)

       ctrl+x+l  ——行补齐,输入行首字母可以补齐一行

       ctrl+x+k  ——字典功能,输入单词的前几个字母,显示字典里的相关单词

字典需要的.vimrc配置内容:

set dictionary+=~/.vim/dict/simple

set dictionary -=/usr/share/dict/words dictionary +=/usr/share/dict/word

后两个功能的实现需要一些插件。还有象taglist (象目录一下的显示在一旁)、snipmate(用简单的几个字母显示一个小的片段,比如输入fun按下tab后就显示处函数的结构)

怎样得到插件?

git clonegit://github.com/happypeter/peter-vim.git 得到所需的插件

然后把peter-vim改名为.vim(隐藏文件)并移动到自己的HOME即/home/shsf/下

(读里面的readme文件)

vim的录音

在normal mode下输入一个q在输入任何一个字母就进入recording列入按下qq后面的q表示记录区。之后对vim的操作都被记录下来包括进入insert mode 。退回到normal mode以后按q退出recording。还在normalmode下按@+q播放处理。就是把以上做的重复做一遍。

vimdiff a b ——用vim以字母为单位显示文件a和文件b的不同(bash命令)

:diffsave  ——在vim中查看文件的更改内容,高亮显示缓冲区里跟硬盘文件的不同(同一个文件而言的)

jj as esc ——用map完成配置。这样方便vim操作。

locate filename  ——定位文件,显示文件的绝对路径。

vim常用快捷键

 2、vim中“上下左右”移动光标:

              h      将光标向左移动。

              j       将光标向下移动。

              k      将光标向上移动。

              l       将光标向右移动。 

normal mode

移动光标

h j k l

ctrl+f

forward 向前翻页

ctrl+b

backward 向后翻页

ctrl+u

up 向上移动半屏

ctrl+d

down 向下移动半屏

0

the first number  移动到行首字符

$

移动到行尾字符

shift+h

head 移动光标第一行

shift+m

middle 移动到中间行

shift+l

low 移动到最下一行

gg

到首行

G

最后一行

5<cr>

到第5

/word

查找word

n

向下再查找word

N

向上再查找word

x X

后前删除(del);X向前删除(backspace)

dd

删除一行

5dd

删除光标开始向下的5

d1G

删除光标以前的

dG

删除光标以后的

yy

复制(参考删除)

nyy

y1G

yG

p P

p向下粘贴;P向上粘贴

u

undo

ctrl+r

redo

.

小数点:重复上一步操作

shift+v

行选

ctrl+v

块选

insert mode

ctrl+n

单词补齐(以前出现过)

ctrl+x+l

行补齐

ctrl+x+k

字典功能(用ctrl+n/p换词)

commend mode

:set nu

number

:set nonu

no number

:set ai

auto indent

:set noai

no autoindent

shift+zz

:wq!

:100,200/a/b/g

100到200行间的a换成b

:1,$s/a/b/g

全换

:1,$s/a/b/gc

全换有提示等用户确认

多窗口

:sp

不加文件名再代开已打开的文件,也可以加文件名,用:q

ctrl+ww

光标窗口切换

:vnew (filename)

竖着再代开一个新窗口,用:bd

:e或:o

打开一个文件覆盖原先的,用:bd关,:bn切换

注释

注释一行  ——ctrl+c

注释一块:块选然后 ctrl+c

函数体折叠

把光标移动到函数开始的 { 处, 然后(normal mode)输入zf%——创建函数折叠;

在已经折叠的加号位置输入   zc ——打开折叠的函数。

当要把打开的函数再折叠就输入  zx  ——关闭(第二次折叠)

shift+v块选以后,输入 zf  ——实现块折叠。

缩进对齐

块选  输入 >  :缩进

块选  输入  <  :缩进返回

在insert mode下对齐函数语句:

ctrl+t    往右移动对齐

ctrl+d    往左移动对齐

原文地址:https://www.cnblogs.com/shanguanghui/p/3638448.html