Vim 常用命令整理(鸟哥linux学习笔记)

VIM练习(鸟哥linux笔记)


vim的学习曲线相当大,所以,如果你一开始看到的是一大堆VIM的命令分类,必须经过长时间的练习,
才能掌握。学会vim并且使它会成为你最后一个文本编辑器。
各种文本编辑器学习


vim的使用

基本上vim分为三种模式,分别是『一般指令模式』、『编辑模式』与『指令列命令模式』。
这三种模式的作用分别是:

  • 一般指令模式

    以vim打开一个文档就直接进入一般指令模式了(这是预设的模式,也简称一般模式)。
    在这个模式中,你可以使用『上下左右』按键来移动游标,你可以使用『删除字节』
    和『删除整列』来处理档案内容,也可以使用『复制、粘帖』来处理你的文件资料。

  • 编辑模式

    在一般指令模式中可以进行、复制、粘帖等等动作,但是却无法编辑文件的内容。要等
    你按下『i,I,o,O,a,A,r,R』等任何一个字母之后才会进入编辑模式。而要返回
    一般指令模式,则必须要按下『ESC』按键才可以退出编辑模式。

  • 指令命令模式

    在一般模式中,输入『:/?』三个中的任何一个按钮,就可以将游标移动到最低下
    那一列。在这个模式当中,可以提供你『搜寻资料』的动作,而读取、存档、大量取代
    字元、离开vim、显示行号等等动作则是在此模式中达成的!

vim三种模式关系图


vim按键说明

一般指令模式可用的按钮说明,游标移动、复制粘帖、搜寻取代等
游标移动
按键 作用
h或向左的方向键 向左移动游标一个字节
j或向下的方向键 向下移动游标一个字节
k或向上的方向键 向上移动游标一个字节
l或向上的方向键 向上移动游标一个字节

注:如果你将右手放在键盘上,你会发现hjkl是排列在一起的,因此可以使用这四个按
键来移动游标。如果你想要进行多次移动的话,例如向下移动30列,可以使用"30j"的组合键,
亦即加上你想要进行的次数,按下动作即可。

按键 作用
Ctrl+f 屏幕向下移动一页
Ctrl+b 屏幕向上移动一页
Ctrl+d 屏幕向下移动半页
Ctrl+u 屏幕向上移动半页
+ 移动游标到非空白字节的下一列
- 移动游标到非空白字节的上一列
n<space> n表示数字,游标会向右移动这一行的n个字节。
0或功能键Home 数字0,移动到行首。
$或功能键End 移动到行尾
H 游标移动到屏幕最上方那一行的第一个字节
M 游标移动到屏幕中央那一行的第一个字节
L 游标移动到屏幕最下方那一列的第一个字节
G 游标移动到文件的最后一行
nG n为数字,游标移动到这个文件的第n行。
gg 游标移动到这个文件的第一行,相当于1G
n<Enter> n为数字,游标向下移动n行
搜索与取代
按键 作用
/word 向游标之下寻找一个名称为word的字符串。
?word 向游标之上寻找一个名称为word的字符串
n n为英文按键。代表『重复之前一个搜寻的动作』
N N为英文按键。代表『反向重复之前一个搜寻的动作』
:n1,n2/word1/word2/g n1与n2为数字,在第n1与n2行之间按寻找word1这个字符串,并将该字符串取代为word2.
:1,\(s/word1/word2/g |从第一行到最后一行寻找word1字符串,并将字符串替换为word2 :1,\)s/word1/word2/gc 从第一行到最后一行寻找word1字符串,并将该字符串取代为word2(且在替换前显示提示字符给使用者
删除、复制与粘帖
按键 作用
x,X 在一行当中,x为向后删除一个字节,X为向前删除一个字节。
nx n为数字,连续向后删除n个字节
dd 删除游标所在行
ndd n为数字,删除游标所在行向下的n行
d1G 删除游标所在到第一行的所有内容
dG 删除游标所在到最后一行的所有内容
d$ 删除游标所在到本行最后一个字节
d0 删除游标所在到本行第一个字节
yy 复制游标所在的那一行
nyy n为数字,复制游标所在的向下n行
y1G 复制游标所在到第一行的所有内容
yG 复制游标所在到最后一行的所有内容
y0 复制游标所在到本行行首的内容
y$ 复制游标所在到本行行尾的内容
p,P p为将已复制的内容在游标下一列粘帖,P则是在游标上一列粘帖
J 将游标所在行与下一行合并
c 重复删除多个资料, 例如向下删除10行,[10cj]
u 复原前一个动作
Ctrl+ r 重做上一个动作
. 重复前一个动作

注:u与Ctrl+r 是很常用的指令。一个是复原,另一个则是重做一次!

一般指令模式切换到编辑模式的可用按键说明
按键 作用
i,I 进入插入模式,i为『从目前游标所在处插入』。I为『在目前所在行的第一个非空白字节处开始插入』
a,A 进入插入模式,a为『从目前游标所在处的下一个字节插入』。A为『从游标所在行的最后一个字节处开始插入』
o,O 进入插入模式,o为『从目前游标所在处的下一行插入新的一行』。O为『在目前所在处的上一行插入一行新行』
r,R 进入替换模式,r只会替换游标所在处的那一个字节,R会一直开启替换模式,直到按下ESC为止。
[ESC] 退出编辑模式,回到一般指令模式
一般指令模式切换到指令模式的可用按键说明
按键 作用
:w 将编辑的内容写入硬件中
:w! 若文件属性为只读时,强制写入该文件。不过,到底能不能写入,还是跟你对该文件的权限有关。
:q 离开vim 不保存
:q! 强制离开vim且不保存修改
:wq 保存后离开vim
ZZ 若文件修改过,则保存离开,否则不保存离开。
:w [filename] 将编辑的文件储存成另一个文件
:r [filename] 在编辑的文件中,读入另一个文件的内容。
:n1,n2 w [filename] 将n1到n2的内容储存成一个filename文件
:!command 暂时离开vim到指令模式下执行shell中command的结果

vim区块选择

区块选择的按键 作用说明
v 字节选择,会将游标经过的地方反白选择
V 行选择,会将游标经过的行反白选择
Ctrl + v 区块选择,可以用长方形的方式选择内容
y 将反白的内容复制起来
d 将反白的内容删除掉
p 将刚刚复制的区块,在游标所在处粘帖上

多文件编辑

同时开启xxx1、xxxx2和xxxx3三个文件。

  vim xxx1 xxxx2 xxxx3
多文件编辑的按键说明
按键 说明
:n 编辑下一个文件
:N 编辑上一个文件
:files 列出目前这个vim开启的所有文档
分屏功能

分屏模式下的按键功能说明
按键|功能说明
:-:|:-:
:sp[filename]|开启一个新视窗,如果有filename,表示在新视窗开启一个新文件,否则表示两个视窗为同一个文件内容。
Ctrl+w+j|游标移动到下面的窗口
Ctrl+w+k|游标移动到上面的窗口
Ctrl+w+q|关闭窗口

vim常用指令图

vim常用指令图


vim练习

  1. 各种插入模式

    a -在光标后插入
    o -在当前行后插入一个新行
    O -在当前行前插入一个新行
    cw -替换从光标所在位置后到一个单词结尾的字符

  2. 简单的移动光标

    0 -数字零,到行头
    ^ -到本行第一个不是blank字符的位置。
    $ -到本行行尾
    g_-到本行最后一个不是blank字符的位置。
    /pattern -搜索pattern的字符串

  3. 拷贝/粘帖

    p -在当前位置之后粘帖
    P -在当前位置之前粘帖
    yy -拷贝当前行相当于dd+p

  4. Undo

    u -取消上一步的操作>
    <C-S-r> 重做上一步操作

  5. 打开/保存/退出/改变文件

    :e


更好

下面,让我们看看vim是怎么重复自己的:

  1. . (小数点)可以重复上一次的命令
  2. N

更强

你要让你的光标移动更有效率,你一定要了解下面的这些命令,千万别跳过

  1. NG/:N 到第N行
  2. gg 到第一行
  3. G 到最后一行
  4. 按单词移动:

    1. w 到下一个单词的开头。
    2. e 到下一个单词的结尾。
    3. E 到下一个由blank字符分隔符结尾的单词的结尾。
    4. W 到下一个由blank字符分隔符开头的单词的开头。
      ![e/w下面,让我们来看看更迅速的光标移动:
  • % 匹配括号移动,支持包括(,{,[,需要你先把光标移动括号上
  • *和# 匹配光标当前所在的单词,移动光标到下一个或上一个匹配单词(*是下一个#是上一个)

更快

你一定要记住光标的移动,因为很多命令都可以和这些移动光标的命令连动。很多命令
都可以像下面这么做:

<start position><command><end position>

例如:0y$ 命令意味着:

  • 0 先把光标跳到行首
  • y 从这里开始拷贝
  • $ 拷贝到本行的最后一个字符
    你也可以输入,ye,从当前位置拷贝到本单词的最后一个字符。
    你也可以输入,y2/foo,来拷贝2个"foo"之间的字符串。

还有很多时候,你并不一定要按y才会拷贝,下面的命令也会拷贝:

  • d 删除
  • v 可视化的选择
  • gU 变大写
  • gu 变小写
  • 等等

可视化选择是一个很有意思的命令,你可以先按v,然后移动光标,你就会看到文本被选择
,然后你可以d,也可以y,也可以gU gu等等。


跳动

在当前行上移动光标 0 ^ $ f F t T , ;
  • 0 到行首
  • ^ 到本行第一个非blank字符
  • $ 到行尾
  • g__ 到本行最后一个不是blank字符的位置
  • fa 到下一个为a的字符处,你也可以fs到下一个为s的字符处
  • t, 到逗号前的第一个字符,逗号可以变成其他字符
  • 3fa 在当前行查找第三个出现的a
  • F和T 同f和t一样,方向相反。

光标移动

还有很有用的命令是dt" 删除" "内的所有内容,直到遇到双引号”

区域选择 <aciton>a<object>或 <action>i<object>

在visual模式下,这些命令很强大,其命令格式为:

<action>a<object>和<action>i<object>

  • action可以是任何的命令,如d(删除),y(拷贝),v(可视化模式选择)。
  • object可能是:w 一个单词,W 一个以空格为分隔符的单词,s 一个句子,p 一个段落
    也可能是一个特别的字符:"、`、)、}、]。

假设你有一个字符串(map(+)("foo")) 而光标在第一个o的位置。

  • vi" 会选择foo
  • va" 会选择"foo"
  • vi) 会选择"foo"
  • va) 会选择("foo")
  • v2i) 会选择map(+)("foo")
  • v2a) 会选择(map(+)("foo"))

actionobject

块操作<C-S-v>

块操作,典型的块操作:0 <C-V> <C-d> I-- [ESC]

  • ^ 到行首
  • <C-v> 开始块操作
  • <C-d> 向下移动(你也可 以用hjkl来移动)
  • I-- [ESC] I是插入,插入"--",按ESC键来为每一行生效。

自动提示:<C-n> 和 <C-p>

在Insert模式下,你可以输入一个单词的开头,然后按<C-p>或是<C-n>,
自动补齐功能就出现了……


宏录制:qa 操作序列 q,@a, @@

  • qa 把你的操作记录在寄存器a
  • @a 会replay被记录的宏
  • @@ 是一个快捷键用来replay最新录制的宏

示例

在一个只有一行且这一行只有"1"的文本中,键入如下命令:

  • qayp<C-a>q

    • qa 开始录制
    • yp 复制行
    • <C-a> 增加1
    • q 停止录制
  • @a 在1下面写下2
  • @@ 在2下面写下3
  • 现在做100@@会创建新的100行,并把数据增加到103


可视化选择 v,V,<C-v>

前面,我们看到了<C-v>的示例,我们可以用V和v,一但选好了,你可以做下面
的事:

  • J 把所有的行连接起来,变成一行
  • <或> 左右缩进
  • = 自动给缩进

在所有被选择的行后面加上点东西:

  • <C-v&g;
  • 选中相关的行(可使用j或是<C-d>或是/pattern或是%等……)
  • $ 到行尾
  • A 输入字符串,按ESC

分屏: :split和vsplit

下面是主要的命令,你可以使用VIM的帮助,:help split 你可以参考网上的分屏文章。

  • :split
  • <C-w><dir> :dir就是方向,可以是hjk或是方向键中的一个,启用来
    切换分屏
  • <C-w>_(或是<C-w>|): 最大化
  • <C-w>+ (或是<C-w>-):增加尺寸

END

猜你喜欢

转载自www.cnblogs.com/pulp/p/9729055.html