vim学习笔记(四)

下面是我的最近更新,差点删除。
下面的笔记摘自vimtutor。<CR>表示回车

删除命令
在normal模式下:
de 删除一个单词,不包含空格
dw 删除一个单词,包含空格
dd 删除当前行
ndd  删除当前行及其后n-1行
d$ 删除当前行光标到行末的字符
d0     删除光标所在处到该行的最前面的第一个字符
dG    删除光标所在到最后一行的所有数据
d1G  删除光标所在到第一行的所有数据

删除命令d的格式
          [number]      d      object =>e|w|$
特殊    2                dd         当前行
ndd   n代表一个数字,删除光标所在的向下n行

x       向后删除一个字符,相当于Delete
X      向前删除一个字符,相当于BackSpace
nx     n代表一个数字,连续向后删除n个字符
c       重复删除多个数据,例如向下删除10行,10cj

dnl     向右删除n个字母

dnh    向左删除n个字母 
dnj     向下删除n行

dnk    向上删除n行

c     改变文本
cnw[word]   将n个word改变为word

C$     改变到行尾

cc    改变整行



撤销类命令
u            撤销最后一次执行的命令
U            恢复该行的原始状态,撤销一行中所做的任何改动
Ctrl+R    撤销以前的撤销命令
.          (小数点)重复前一个操作

粘贴命令
输入dd删除该行,再将光标移到要插入行的上一行,按p,粘贴到指定的位置,注意:要在第20
行插入一行,就将光标放到第19行,使用p将已经删除的文本内容置于光标之后

替换类命令
更改字符
将光标移到要修改的字符位置上,按r,再按要输入的字符,就可更改该字符。比如:要将a->e, 按r,e可更改a为e
这就是说,输入r和要替换掉原位置字符的新字符即可。

改变一个单词的全部或是部分
将光标移到单词lubw->line中的u字母位置,输入cw,进入插入状态,输入要更改的字符(ine),按ESC返回normal状态,继续修改下一个单词
同样,c$ 更改本行,将光标移到第一个错误位置处
cw[newword]  替换为newword

(移动)定位及文件状态
space          光标右移一个字符

Backspace   光标左移一个字符

Enter           光标下移一行
gg  移动文件的第一行
G    移动文件的最末行
nG  移动到这个文件的第n行,这里n是一个具体的数字,比如20G
Ctrl+G   显示当前行号,当迷失位置时,使用该命令查看

行间移动
0    数字0,移动到行首的命令
$    移动到行尾的命令
^    移动到行首的第一个空白符
n$  光标移至第n行尾
n[Enter]   光标向下移动n行
+    光标移动到非空格符的下一行
-     光标移动到非空格符的上一行
f<a>  移动光标到当前行的字符a上

F     相反

%    移动到与制匹配的括号上去(),{},[],<>等

字符移动
h/j/k/l      左下上右

在一行中,单词间移动
w      移动光标到下一个单词词首
W     移动到下一个单词(跳过标点符号)
b      移动光标到上一个单词词首
e      移动光标到下一个单词词尾
ge   移动光标到上一个单词词尾
]s    移动光标到下一个拼写有错误的单词
[s    移动光标到上一个拼写有错误的单词

段落/区块
{      跳到上一段(以空白行分隔)
}      跳到下一段(以 空白行分隔)
[{    跳到当前区块开头
]}    跳到当前区块结尾

搜索命令
顺序查找
在正常模式下,输入/以及尾随的字符串可以在当前文件中查找该字符串
/errror 回车
要继续查找同一个字符串,按n,逆序查找,输入N
逆序查找
?errror 回车
继续逆序查找同一个字符串,按n;要顺序查找,输入N
如果查找已经到文件末尾,会自动从文件头部继续查找
按q/或者q?命令在vim窗口最下面打开一个新窗口,列出查找历史,按:q退出,修改原查找项,按Enter继续查找
查找配对的括号),],}
将光标放在(,[,{之一处,按%会自动将光标跳转到另一个配对的括号处,再按%会返回到先前的括号处,此功能便于程序的调试
设置可使查找或是替换忽略大小写的命令选项
比如查找ignore,在正常模式下输入/ignore,再输入
:set ic  表示忽略大小写
再输入
:set hls is 分别表示高亮(highlight search)和增量搜索(inc search)
会发现查找的单词ignore会反黄显示,

#     往前搜寻当前光标所在的word
*     往后搜寻当前光标所在的word
fx   当前行往后搜索word x
gd   跳转到当前光标所在的word的定义位置(变量或是函数定义的地方)

c-f    (即 ctrl 键与 f 键一同按下) 本命令即 page down.

c-b    (即 ctrl 键与 b 键一同按下, 后同) 本命令即 page up.

 ''     此命令相当有用, 它移动光标到上一个标记处, 比如用 gd, * 等查找到某个单词后, 再输入此命令则回到上次停留的位置.

 '.     此命令相当好使, 它移动光标到上一次的修改行.

  `.              此命令相当强大, 它移动光标到上一次的修改点.

替换命令
将光标移到要替换的行,输入
:s/old/new 回车  替换光标所在行的第一个匹配串
:s/old/new/g 回车  替换光标所在行的所有匹配串
:%s/old/new/g 回车  替换整个文件中的所有匹配串
除了g外,还有
N  总共替换多少次
c  commit,每次替换前要确认

复制文本
先y(yank抽出),把文本复制到文本寄存器中,再使用p粘贴到别处.注意:所有与“y”有关的复制命令都必须与“p”配合才能完成复制与粘贴功能。
p    粘贴用x或d删除的文本 
ynw 复制n个单词
yw  拷贝一个单词,含单词后面的空白字符

ye   拷贝一个单词,不含空格
yy   拷贝一个整行
y$   拷贝到行尾
nyy     复制光标所在的向下n行,这里n代表数字,比如20yy
y1G    复制光标所在行到一行到第一行的所有数据
yG      复制光标所在行到一行到最后一行的所有数据
y0      复制光标所在的那个字符到该行行首的所有数据


重复
.                              重复上一次命令
N<command>          重复某个命令N次,这里N是一个具体的数字,比如
3p                           复制3次
10j                          向下移动10行

屏幕移动
H     光标移动到这个屏幕最上方的那一行的第一个字符
M    光标移动到这个屏幕中央的那一行的第一个字符
L     光标移动到这个屏幕最下方的那一行的第一个字符


翻页/屏幕翻滚
Ctrl-B     向上翻页  
Ctrl-F     向下翻页
Ctrl-u     向上半屏
Ctrl-d     向下半屏
注意:Ctrl-B和Ctrl-F前可以加上数字,表示向上或向下翻多少页
nz           将第n行滚至屏幕顶部,不指定n时将当前行滚至屏幕顶部

多窗口间移动
使用:sp可以在当前vim窗口纵向切割开一个子窗口,展示相同的内容,如果输入的是:sp /etc/hosts之类的另一个文件名,则该子窗口打开一个不同的文件,
:split:分割一个窗口

:split file.c :为另一个文件file.c分隔窗口

 :nsplit file.c: 为另一个文件file.c分隔窗口,并指定其行数

多文件编辑

在一个 vim 程序中打开很多文件进行编辑是挺方便的.


:sp(:vsp) 文件名    vim 将分割出一个横(纵)向窗口, 并在该窗口中打开新文件.

                      从 vim6.0 开始, 文件名可以是一个目录的名称, 这样, vim 会

                      把该目录打开并显示文件列表, 在文件名上按回车则在本窗口打

                      开该文件, 若输入 O 则在新窗口中打开该文件, 输入 ? 可以看

                      到帮助信息.


:e 文件名        vim 将在原窗口中打开新的文件, 若旧文件编辑过, 会要求保存.


c-w-w            vim 分割了好几个窗口怎么办? 输入此命令可以将光标循环定位

                      到各个窗口之中.


:ls                 此命令查看本 vim 程序已经打开了多少个文件, 在屏幕的最下方

                      会显示出如下数据:

                      1   %a      "usevim.html"         行 162

                      2   #       "xxxxxx.html"         行 0


                      其中:

                      1               表示打开的文件序号, 这个序号很有用处.

                      %a             表示文件代号,
                      % 表示当前编辑的文件,

                      # 表示上次编辑的文件

                      "usevim.html"   表示文件名.

                      行 162          表示光标位置.

:b 序号(代号)  此命令将指定序号(代号)的文件在本窗口打开, 其中的序号(代号)

                      就是用 :ls 命令看到的.


:set diff           此命令用于比较两个文件, 可以用

                      :vsp filename

                      命令打开另一个文件, 然后在每个文件窗口中输入此命令,就能看到效果了.

我们可以利用下面的命令在多个子窗口间移动
Ctrl-W              在窗口中切换
Ctrl-W h/j/k/l      在多个窗口间左下上右移动   
Ctrl-W q            关闭子窗口
Ctrl-W H/J/K/L    上下左右移动窗口的命令

相对于光标滚屏
zt   把光标所在行移动到窗口的顶端
zz   把光标所在行移动到窗口的中间
zb  把光标所在行移动到窗口的底部

模式切换
v               字符选择,会将光标经过的地方反白选择
Shift+V      进入行选择模式(就是大写的V)
Ctrl+V        进入列选择或是块选择模式,或可视块(visual block)
Shift+I        进入列插入状态
Shift+a       进入块插入状态
y               将反白的地方复制出来
p               粘贴反白的地方
d               删除反白的地方

visual 模式:

        v:进入visual 模式

        V:进入行的visual 模式

        ctrl+v:进如块操作模式用o和O改变选择的边的大小

        在所有行插入相同的内容如include<,操作方法如下:

        将光标移到开始插入的位置,按CTRL+V进入VISUAL模式,选择好模块后按I(shift+i),后插入要插入的文本,按[ESC]完成

多文件编辑
可以使用vim来同时打开多个vim文件并进行编辑,比如vim  hosts /etc/hosts来同时打开这两个文件,以便于我们在多个文件之间复制数据
:n         编辑下一个文件
:N        编辑上一个文件
:files     列出目前这个vim打开的所有文件

一般模式切换到编辑模式的按钮
i      (insert mode)       从当前光标处(光标前)插入
I      (insert mode)       从当前行的第一个非空格符处开始插入(当前行首)
a     (insert mode)       从当前光标的下一个字符开始插入(光标后)
A     (insert mode)      从当前行的最后一个字符开始插入(当前行首)
o     (insert mode)      从当前光标所在行之下插入新的一行
O     (insert mode)     从当前光标所在行之上插入新的一行
r     (replace mode)    替换光标所在的字符一次
R    (replace mode)    替换当前字符及其后的字符,直至按ESC键
s    从当前光标位置处开始,以输入的文本替代指定数目的字符

S    删除指定数目的行,并以所输入文本代替之 
ncw或nCW    修改指定数目的词

nCC   修改指定数目的行
ESC   退出编辑模式,回到一般模式normal mode

一般模式切换到命令行模式的按钮
:w                                   将数据写入磁盘文件
:w!                                  强制将数据写入磁盘文件,写入是否成功由文件权限决定
:e filename                   打开文件filename进行编辑

:e!        放弃修改文件内容,重新载入该文件编
:q                                    离开vim
:q!                                   强制离开vim,不保存修改后的文件
:wq                                 保存文件后离开vim
:wq!                                强制保存后离开vim
ZZ                                  若文件没有修改,不保存离开;否则,保存后离开
ZQ                                 不保存退出
:w [filename]                   另存文件
:r [filename]                     将filename文件的数据加到当前光标所在行后面
:n1,n2w [filename]           将n1和n2行之间的内容另存为filename文件
:!command                     暂离开vim,到命令行模式下显示command执行的结果
:r!command:将命令command的输出结果放到当前行

:n1,n2 write temp.c 将本文件中的n1,到n2行写入temp.c这个文件中去

:read file.c 将文件file.c的内容插入到当前光标所在的下面

:0read file.c 将文件file.c的内容插入到当前文件的开始处(第0行)

:nread file.c 将文件file.c的内容插入到当前文件的第n行后面

:read !cmd :将外部命令cmd的输出插如到当前光标所在的下面

自动补全
Crtl+N   下一个备选word
Ctrl+P   上一个备选word
Ctrl+X   自动补全tag名
Ctrl+F

进入vim的命令:       

vim filename :打开或新建文件,并将光标置于第一行首

vim +n filename :打开文件,并将光标置于第n行首

vim + filename :打开文件,并将光标置于最后一行首

vim +/pattern filename:打开文件,并将光标置于第一个与pattern匹配的串处

vim -r filename :在上次正用vim编辑时发生系统崩溃,恢复filename

vim filename….filename :打开多个文件,依次编辑

宏:

 q[a-z]  开始记录但前开始的操作为宏,名称可为【a-z】,然后用q终止录制宏

 reg   显示当前定义的所有的宏,用@[a-z]来在当前光标处执行宏[a-z]

帮助:

        :help :查看帮助文档,在这之中,按CTRL+] 进入超连接,按CTRL+O 返回。

        :help subject :看某一主题的帮助,ZZ 退出帮助

其它常用:
        :newtab     新建标签
        :gt     转至下一个标签
        :gT     转到上一个标签
        :au GUIEnter * simalt ~x     启动时最大化

书签:

        m[a-z]:在文中做标记,标记号可为a-z的26个字母

        `a:移动到标记a处


"剪贴板" 缓冲-    ' "xY ' 用于剪切或复制到一个名为x的缓冲区(Y 代表任何的

删除或取样命令), ' "xZ ' 用于粘贴内容(Z代表粘贴命令p 或 P); (其中x可以为

任何字母, 也可在跳转到另一文件中时继续生效(:e filename).

快速输入字符
   在 vi 中, 不要求你输入每一个字符, 可以有很多种方法快速输入一些字符.

   使用 linux/unix 的同学一定有一个经验, 在命令行下输入命令时敲入头几个字符再按

TAB 系统就会自动将剩下的字符补齐, 假如有多个匹配则会打印出来. 这就是著名的命令

补齐(其实windows中也有文件名补齐功能). vi 中有许多的字符串补齐命令, 非常方便.

c-p(c-n)     在编辑模式中, 输入几个字符后再输入此命令则 vi 开始向上(下)搜索开头与其匹配的单词并补齐, 不断输入此命令则循环查找. 此命令会在所有在这个 vim 程序中打开的文件中进行匹配.

c-x-l       在编辑模式中, 此命令快速补齐整行内容, 但是仅在本窗口中出现的文档中进行匹配.

c-x-f     在编辑模式中, 这个命令表示补齐文件名. 如输入: /usr/local/tom 后再输入此命令则它会自动匹配出: /usr/local/tomcat/

abbr     即缩写. 这是一个宏操作, 可以在编辑模式中用一个缩写代替另一个字符串. 比如编写java文件的常常输入 System.out.println, 这很是麻烦, 所以应该用缩写来减少敲字. 可以这么做:
 :abbr sprt System.out.println 
 以后在输入sprt后再输入其他非字母符号, 它就会自动扩展为System.out.println


8. 宏替换

   vi 不仅可以用 abbr 来替换文字, 也可以进行命令的宏定义. 有些命令输起来很费劲,

因此我把它们定义到 <F1>-<F12> 上, 这样就很方便了.这些配置可以预先写到 ~/.vimrc

(windows 下为 $VIM/_vimrc) 中, 写进去的时候不用写前面的冒号.


  :nmap <F2> :nohls<cr>                 取消被搜索字串的高亮

  :nmap <F9> <C-W>w                  命令模式下转移光标到不同窗口

  :imap <F9> <ESC><F9>               输入模式下运行<F9>

  :nmap <F12> :%s= *$==<cr>       删除所有行尾多余的空格.

  :imap <F12> <ESC><F12>            同上


  :java 中: (注, 这里为什么说 java 中, 因为以下定义对其他文件格式不起作用, 下文会说到如何实现这一点)

  :nmap <F3> :comp javac<CR>:mak -d . %<CR>

       此命令用 javac 编译 java 文件, 它会自动将光标定位到出错点. 不过这需要定

       义一个 javac.vim 文件在 $VIM/compiler 下, 在 javac.vim 里面只有两行字:

          setlocal makeprg=javac

          setlocal errorformat=%A%f:%l:/ %m,%-Z%p^,%-C%.%#


  :nmap <F4> :comp ant<CR>:mak<CR>

       此命令用 ant 编译 java 文件, 它会自动将光标定位到出错点. 一般来说, 安装

       vim 后已经有了compiler/ant.vim文件, 因此这个命令可以直接使用. 但是需要

       在当前目录下有 build.xml 文件, 当然还必须安装 ant 才行.


  :nmap <F5> :cl<CR>                 此命令用于查看所有的编译错误.

  :imap <F5> <ESC><F5>


  :nmap <F6> :cc<CR>                 此命令用于查看当前的编译错误.

  :imap <F6> <ESC><F6>


  :nmap <F7> :cn<CR>                 此命令用于跳到下一个出错位置.

  :imap <F7> <ESC><F7>


  :nmap <F8> :cp<CR>                 此命令用于跳到上一个出错位置.

  :imap <F8> <ESC><F8>


  :nmap <F11> :JavaBrowser<cr>

       此命令用于在窗口左部分割出一个新窗口, 里面的内容是 java 的资源树, 包括

       本文件中出现的类, 类的成员变量及成员方法, 就好像 JCreator 表现的那样.

       在这个窗口中输入 ? 会看到帮助. 嘿嘿, 很好用, 不过需要 ctags 支持.

  :imap <F11> <ESC><F11>


9. TAB

   TAB 就是制表符, 单独拿出来做一节是因为这个东西确实很有用.


   <<                  输入此命令则光标所在行向左移动一个 tab.

   >>                  输入此命令则光标所在行向右移动一个 tab.

   5>>                 输入此命令则光标后 5 行向右移动一个 tab.

   :12,24>             此命令将12行到14行的数据都向右移动一个 tab.

   :12,24>>            此命令将12行到14行的数据都向右移动两个 tab.


   那么如何定义 tab 的大小呢? 有人愿意使用 8 个空格位, 有人用4个, 有的用2个.

   有的人希望 tab 完全用空格代替, 也有的人希望 tab 就是 tab. 没关系, vim 能

   帮助你.以下的设置一般也都先写入配置文件中, 免得老敲.


   :set shiftwidth=4   设置自动缩进 4 个空格, 当然要设自动缩进先.

   :set sts=4          即设置 softtabstop 为 4. 输入 tab 后就跳了 4 格.

   :set tabstop=4      实际的 tab 即为 4 个空格, 而不是缺省的 8 个.

   :set expandtab      在输入 tab 后, vim 用恰当的空格来填充这个 tab.


10. autocmd

    这个命令十分的强大, 可以用这个命令实现对不同的文件格式应用不同的配置; 可以

在新建文件时自动添加上版权声明等等. 这些命令一般定义在 ~/.vimrc 这样的配置文件

里面. 由于他很强大, 所以我不能给出很具体的说明, 只能举几个例子, 详细的请看帮助.


  :autocmd!               删除所有之前的自动命令.

  autocmd FileType        java  source ~/.vim/files/java.vim

  autocmd FileType        java  source ~/.vim/files/jcommenter.vim

    以上两条命令让我在打开 java 文件时才应用后面提到的两个配置文件.

  autocmd BufNewFile      *.java  0r ~/.vim/files/skeletons/java.skel

    以上这条命令让我在新建 java 文件时自动加入 java.skel 文件的内容.

  autocmd BufNewFile      *.java  normal gnp

    以上这条命令让我在新建 java 文件时自动运行 gnp 命令, 这个命令进行一些特殊化

    处理, 比如将新 java 文件中的 __date__ 替换成今天的日期什么的.



你可能感兴趣的:(vim学习笔记(四))