首页 > vim学习笔记(四)

vim学习笔记(四)

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

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

 

删除命令

在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上

 

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          重复某个命令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 来替换文字, 也可以进行命令的宏定义. 有些命令输起来很费劲,

 

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

 

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

 

 

  :nmap :nohls                 取消被搜索字串的高亮

 

  :nmap w                  命令模式下转移光标到不同窗口

 

  :imap                输入模式下运行

 

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

 

  :imap            同上

 

 

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

 

  :nmap :comp javac:mak -d . %

 

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

 

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

 

          setlocal makeprg=javac

 

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

 

 

  :nmap :comp ant:mak

 

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

 

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

 

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

 

 

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

 

  :imap

 

 

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

 

  :imap

 

 

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

 

  :imap

 

 

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

 

  :imap

 

 

  :nmap :JavaBrowser

 

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

 

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

 

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

 

  :imap

 

 

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__ 替换成今天的日期什么的.

 

 

 

更多相关:

  • 本文来自 运维人生 ,作者:fly是个稻草人链接:http://www.ywadmin.com/?id=76误删除linux系统文件了?不用急,本文将给你一个恢复linux文件的方法,让你轻松应对运维中的各风险问题。方法总比问题多~说在前面的话针对日常维护操作,难免会出现文件误删除的操作。大家熟知linux文件系统不同win有回收...

  • 原文来自SecIN社区—作者:WiHat0x00 什么是WebShell渗透测试工作的一个阶段性目标就是获取目标服务器的操作控制权限,于是WebShell便应运而生。Webshell中的WEB就是web服务,shell就是管理攻击者与操作系统之间的交互。Webshell被称为攻击者通过Web服务器端口对Web服务器有一定的操作权限,而...

  • 断电时文件系统发生了什么?硬盘又发生了什么?下一次开机时写到一半的文件在系统层面还在吗?在底层还在吗?更进一步的, 文件系统如何保证事务性, 会不会存在某种极端情况导致例如最后几个bit还没写完, 文件系统却认为它成功了的情况?回答不限任何文件系统,谢谢!下面是「北极」的回复分享断电的一瞬间,很多事情是无法确定的:1. 你无法确定...

  • 接到项目需求。需要搭建一个页面进行交互,慢慢来b (2).jpg使用python django框架进行页面的搭建在项目文件下打开窗口,输入命令;django-admin startproject helloword#在文件helloword/helloword/创建view.py在view.py文件中输入以代码from django....

  • 常见的错误集合解决方案(一)No.1提示错误'Microsoft.VC90.CRT,version="9.0.21022.8"把Microsoft.NET Framework 3.5.1下面的全部勾选上。No.2解决Qt Designer设计的图标但是VS生成不显示问题描述:在Qt designer中为菜单栏和工具栏设计的图标,但是...

  • 在调用Windows API函数SetCursor设置光标时,可能会碰到闪烁的问题:移动鼠标,光标在Class Cursor(即注册窗口类时指定的Cursor)与预设Cursor之间闪烁。 在MSDN上有关SetCursor函数的备注中强调,如果Class Cursor非空,那么每当鼠标移动,系统都会把光标恢复为Class Curso...

  • 在DOS窗口执行了一些列命令完成某项工作后,如果要查看都执行了那些命令,该如何办呢?(前提:DOS窗口未关闭的情况下)     一、方法一:使用↑↓箭头上下翻看执行过的命令,此方式适宜执行命令较少的情况; 二、方法二:使用快捷键; F7快捷键查看所有执行过的命令 F3:调出上一条执行过的命令,调出后直接回车即可执行; F...

  • 在windows的DOS操作界面里面,清屏的命令是cls,那么在linux 里面的清屏命令是什么呢?下面笔者分享几种在linux下用过的清屏方法。 1、clear命令、这个命令将会刷新屏幕,本质上只是让终端显示页向后翻了一页,如果向上滚动屏幕还可以看到之前的操作信息。 2、Ctrl+l(小写的L)、这是一个清屏的快捷键,这个是笔者...

  • LINUX下用CTRL+R快速搜索HISTORY历史命令,快速索引到之前使用过的命令行语句 前提是,搜索已经使用的命令,否则是查不出来结果的。 ctrl+r 用途:反向搜索执行过的命令。(reverse-i-search) 1、任何目录下按住ctrl + r 2、输入历史命令中的字符串 ,比如 输入shut 会检索...

  • 刚开始接触linux,总有些简单的问题不知道怎么搞定,先将目前汇总的解决方法叫做"linux入门-1",后续在使用过程中逐步总结。   1. 连接 ADSL : sudo pon dsl-provider 断开 ADSL: sudo poff 查看 ADSL 状态: plog 2. dpkg 命令 dpkg 是 Debia...

  • 文章目录NVME 和 AHCI 性能比较NVME-CLI nvme工具使用1. 安装2. 命令综述3. 基本命令演示4. NVME 固件设备升级...