VIM学习笔记

前面一段时间,用了几天的时间,又深入使用了VIM(不仅仅停留在h,j,k,l),下面是一些常用的操作。

2013年8月21日

------------------------------------------------------------

<Ctrl-v> <Ctrl-d> 在可视化模式下选择到尾部;

<Ctrl-a> 将光标放在一个数字上面,该数字会自动加一;

<Ctrl-n> <Ctrl-p> 在I-Mode下,自动补全内容;

分屏相关:

<Ctrl-w> c 关闭当前窗口;

<Ctrl-w> q 关闭当前窗口,如果只剩下最后一个,则退出vim;

<Ctrl-w> = 让所有屏幕同等大小

<Ctrl-w> - 减少高度

<Ctrl-w> + 增加高度

<Ctrl-w> L 向右移动

<Ctrl-w> H 向左移动

<Ctrl-w> K 向上移动

<Ctrl-w> J 向下移动

<Ctrl-w> l 将光标移动到左边的屏幕

<Ctrl-w> h 将光标移动到右边的屏幕

<Ctrl-w> k 将光标移动到上边的屏幕

<Ctrl-w> j 将光标移动到下边的屏幕

<Ctrl-w> < > 增加、减少窗口宽度

<Ctrl-w> T 移动当前窗口至新的标签页(由split->tab)

:resize -4 明确当前光标所在窗口大小减多少

:resize +4 明确当前光标所在窗口大小加多少

:resize 4  明确设定当前光标所在窗口的大小

2013年8月22日

------------------------------------------------------------

1. *,单独按下表示完整匹配光标下的单词。把光标移动到你要搜索的词(变量名、函数名等)上,比如"test",然后按"*",Vim将自动缠身给一个对"\<test\>"的搜索,也就是搜索完整的单词test。

相似的技巧还有"#"(向上完整匹配光标下的单词)、"g*"(向下部分匹配光标下的单词)等。

2. <Ctrl-x> <Ctrl-f> 搜索可匹配的文件名

3. ga (显示光标下的字符在当前使用的encoding下的内码)

4. guw (光标下的单词变为小写) gue

5. gUw (光标下的单词变为大写) guE

6. 将整个文档全变为小写(大写)

    gg

    gu(gU)

    G

7.  gU0     从光标所在的位置到行首,都变为大写

    gU$     从光标所在的位置到行尾,都变为大写

    gUG     从光标所在的位置文章最后一个字符,都变为大写

    gU1G    从光变所在的位置到文章第一个字符,都变为大写

8. <Ctrl-r> 在命令模式下可复制寄存器中的内容

9. tabnew [filename] 在一个新的标签内打开一个新的文件

10. gt ,gT 标签内切换 <num>gt,<num>gT

11. :tabs 查看所有打开的tab

2013年8月23日

------------------------------------------------------------

:ls                             : 显示当前buffer的情况

:cd ..                          : 进入父目录

:args                           : 显示目前打开的文件

~ 光标处字母大小写转换

\'.              : 跳到最后修改的那一行 (超级有用)

`.               : 不仅跳到最后修改的那一行,还要定位到修改点

:history         : 列出历史命令记录

:his c           : 命令行命令历史

:his s           : 搜索命令历史

q/               : 搜索命令历史的窗口

q:               : 命令行命令历史的窗口

:<C-F>           : 历史命令记录的窗口

:map <F2> :w<CR> : 一个映射,将f2建映射成为 保存 <CR>表示回车。

!!date           : 读取date的输出 (但是会替换当前行的内容)

# 在分割窗口中快速切换

:map <C-J> <C-W>j<C-W>_

:map <C-K> <C-W>k<C-W>_

在分割窗口中相互切换,并最大化。<C-W>k,<C-W>j是上下切换,<C-W>_,将当前光标所在窗口最大化。

ab STR  String   缩写命令

d /text 删除从文本中出现\" text\"中所指定字样的位置,一直向前直到下一个该字样所出现的位置(但不包括该字样)之间的内容

d fc 删除从文本中出现字符\"c\"的位置,一直向前直到下一个该字符所出现的位置(包括

该字符)之间的内容

d tc 删除当前行直到下一个字符\" c\"所出现位置之间的内容

2013年8月24日

------------------------------------------------------------

注意:以下命令都是在插入模式用的 CTRL-C: 退出插入模式。如果嫌<Esc>太费事,可以试试这个。

CTRL-a: 插入先前插入过的内容。看起来比较有用,但是飘忽不定,很难把握。

CTRL-n/CTRL-p: 搜索匹配,自动完成单词(超级有用)。

CTRL-r: 插入寄存器内容。例如<C-r>*会插入windows剪贴板的内容。:reg命令查看全部寄存器。

CTRL-t/CTRL-d: 将本行缩进/去缩进,无论光标在什么位置

CTRL-y: 输入和上面一行相同的字符。有时候可能用的着。

CTRL-e: 输入和下面一行相同的字符。

CTRL-x: 进入CTRL-x模式。CTRL-x模式基本上是用来自动完成的。vim的自动完成可以包含当前文件、头文件、tag文件、字典文件等。

CTRL-x模式中的主要命令:

CTRL-x  CTRL-l: 整行自动完成

        CTRL-p/CTRL-n: 在当前文件中自动完成单词

        CTRL-f: 自动完成文件名

        CTRL-e: 在插入模式下让屏幕往上滚一行(在Normal模式下也可以)

        CTRL-y: 屏幕下滚一行(同上)

2013年8月26日

------------------------------------------------------------

mx 将当前位置标记成x(此处的x可以是任意字母)

'x (单引号) 将光标移到标记x处的行首

`x (反引号) 将光标移到标记x处

`` (两个反引号) 当前光标处与标记处来回切换

'' (双引号) 当前光标所在行处与标记处来回切换,光标定位在行首

:map 列出所有已定义的映射

:unmap lv  取消lv映射的命令

:mapclear 清楚所有映射

:inoremap 插入模式的map

map需要注意的是:

    1.默认情况下,map命令是作用在normal模式下的

    2.如果是想再virsual模式下新建某一个命令的宏,可以使用:vmap,:vmap d <esc>dd就可以在virsual模式下把光标所在行删除。

    3.默认情况下,map是采用递归映射的,比如a映射成b, :map a b,然后c又映射成了a,:map c a,那么最终c也会自动映射成b,等同于:map c b 。如果不想使用递归,那么就要用:noremap

:inoremap ( ()<esc>i 插入模式下输入'(',输出'()'

2013年8月27日

------------------------------------------------------------

:set foldmethod 可以设置折叠方式,默认使用manual(手动)方式。

zf 创建折叠(fold creation)

zo 打开折叠(open)

zc 再次折叠起来(colse)

zf`a 折叠当前光标处到表计a处的文本

zf% 光标移至'{'时,vim会去匹配'}',这样'{}'这件的内容就可以折叠起来

viw(可视模式下选择一个单词)

daw

diw

上面两个都是删除一个的单词(区别一下dw),那么a和i有什么不同呢?

a会选择一个对象(an object)包括空格在内,而i只会选择一个对象的内部(an inner object) 不包含空格

下面是一些命令含义:

aw  a word

iw  inner word

aW  a WORD

iW  i WORD 

as  a sentence

is  i sentence

ap  a paragraph

ip  i paragraph

a[或a]  a[] block (a[ 与a] 都表示一个[]块)其他符号类似

at  a tag

it  inner tag

缩写

:abbreviate 作用于所有模式(ab)

:iabbrev    作用于插入模式(iab) :iunabbrev forx (取消某个缩写)

:cabbrev    作用于命令行模式(cab)

:iab    forx for(x=0;x<100;x++){<CR><CR>} (这里例子主要是表示可以加入回车)

:iab sysout System.out.println("");<esc>2hi

如果写出一个缩写词语,但是本意确实要写这个词语,怎么取消掉缩写呢? 当输入完要写的东西后按<Ctrl-v>

copy命令

    命令格式:[range]copy{address},range表示拷贝范围,address表示目标地址。

如 :1copy. 表示将第一行的内容拷贝到当前所在光标的下一行(.表示当前行),如果三行全部拷贝 :1,3copy.   

    copy的另外两种写法  :co或者:t。常用命令:

    :3t. 拷贝第三行到当前光标的下一行

    :t3  拷贝当前行到第三行的下一行

    :t.  拷贝当前行到光标的下一行,相当于Yp和yyp

    :t$  拷贝当前行到最后一行

move操作与copy操作方式类似。

其实学习vim比较繁琐,很多的命令,这些命令也许你看的时候很简单,但是当你真正用的时候就会忘记掉。所以学习vim没有捷径,只有不停的练习,强迫自己在日常编辑文本的时候使用vim,使用的过程中遇到一个想法(比如,我要复制整篇文章,然后到别的地方),那就大胆的去尝试,放心的去google。多使用几次,我相信等下次的时候,直接拿来就使用了。在学习的过程中,我也是这样做的。

猜你喜欢

转载自qq54903099.iteye.com/blog/1935938