下面是我的最近更新,差点删除。

下面的笔记摘自vimtutor。<CR>表示回车

删除命令

在normal模式下:

de 删除一个单词,不包含空格

dw 删除一个单词,包含空格

dd 删除当前行

1,10d 删除指定行,第1到10行

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学习笔记(四)相关推荐

  1. 华清远见fs4412开发板学习笔记(四)

    fs4412开发板学习笔记(四) 今天的课程安排 1.复习 1.1 VIM 编辑器 [1] vim + filename 打开 [2] 工作模式 命令模式 编辑模式 底行模式 [3] 模式切换 命令- ...

  2. C#可扩展编程之MEF学习笔记(四):见证奇迹的时刻

    前面三篇讲了MEF的基础和基本到导入导出方法,下面就是见证MEF真正魅力所在的时刻.如果没有看过前面的文章,请到我的博客首页查看. 前面我们都是在一个项目中写了一个类来测试的,但实际开发中,我们往往要 ...

  3. IOS学习笔记(四)之UITextField和UITextView控件学习

    IOS学习笔记(四)之UITextField和UITextView控件学习(博客地址:http://blog.csdn.net/developer_jiangqq) Author:hmjiangqq ...

  4. RabbitMQ学习笔记四:RabbitMQ命令(附疑难问题解决)

    RabbitMQ学习笔记四:RabbitMQ命令(附疑难问题解决) 参考文章: (1)RabbitMQ学习笔记四:RabbitMQ命令(附疑难问题解决) (2)https://www.cnblogs. ...

  5. JSP学习笔记(四十九):抛弃POI,使用iText生成Word文档

    POI操作excel的确很优秀,操作word的功能却不敢令人恭维.我们可以利用iText生成rtf文档,扩展名使用doc即可. 使用iText生成rtf,除了iText的包外,还需要额外的一个支持rt ...

  6. Ethernet/IP 学习笔记四

    Ethernet/IP 学习笔记四 EtherNet/IP Quick Start for Vendors Handbook (PUB213R0): https://www.odva.org/Port ...

  7. OpenCV学习笔记四-image的一些整体操作

    title: OpenCV学习笔记四-image的一些整体操作 categories: 编程 date: 2019-08-08 12:50:47 tags: OpenCV image的一些操作 sP4 ...

  8. 吴恩达《机器学习》学习笔记四——单变量线性回归(梯度下降法)代码

    吴恩达<机器学习>学习笔记四--单变量线性回归(梯度下降法)代码 一.问题介绍 二.解决过程及代码讲解 三.函数解释 1. pandas.read_csv()函数 2. DataFrame ...

  9. esp8266舵机驱动_arduino开发ESP8266学习笔记四—–舵机

    arduino开发ESP8266学习笔记四-–舵机 使用时发现会有ESP8266掉电的情况,应该是板上的稳压芯片的限流导致的,观测波形,发现当舵机运转时,电源线3.3V不再是稳定的3.3V,大概是在3 ...

最新文章

  1. 【C 语言】指针数据类型 ( 指针类型变量 | 使用 * 操作内存 )
  2. vantui框架switch上显示提示文字_?Switch主机账号官网注册教程
  3. 查询oracle中用户的角色,oracle中用户角色的查询和授权
  4. 云原生数据湖分析DLA 2020年年度总结
  5. deactivate_sending在创建新的table entry时的作用
  6. linux添加video驱动,linux下video驱动源码位置
  7. mac地址漂移flapping的前因后果
  8. FreeRTOS学习笔记---动态创建任务 xTaskCreate() 源码分析
  9. 《Spring 3.0就这么简单》——1.5 业务层
  10. java 文件追加 变大_用java写在doc中追加内容代码时,为什么它只能写入一次内容,后面都只是增加文件的大小,不增加内容啊?...
  11. myeclipse中hibernate出错
  12. 强化学习(reinforcement learning)教程(后面是翻译)
  13. Yarn的原理与资源调度
  14. GoC全教程(附各种下载、教程链接)
  15. 未检测任何音频设备,关机假死
  16. 《Netty权威指南》笔记 —— 第十二、十三、十四章
  17. 大数据与AI平台:人工智能+大数据赋能产业供应链智能化风控核动力 PPT分享
  18. mysql 建复合索引_mysql 建立复合索引
  19. png转bmp,png批量转成bmp
  20. 英汉互译 php,美丽的英文诗(英汉互译)

热门文章

  1. 【C++自我精讲】基础系列二 const
  2. 怎样提高WebService的性能
  3. 用C++开发Web应用
  4. php常用20函数,PHP常用函数
  5. 欧拉函数求一个数倒数的循环节长度
  6. ui动效 unity_Unity - UIWidgets 2. 控件组合
  7. Java在linux新建png_教你如何使用libpng显示PNG图片
  8. c语言以空格分割字符串_C语言: 利用sscanf() 函数分割字符串
  9. matlab两个多项式相除,C++和MATLAB混合编程求解多项式系数(矩阵相除)
  10. 如何启用计算机上的无线网络连接,告诉大家win10无线网络连接如何打开