vim-1-基本使用

Vim的几种模式

普通模式, 插入模式, 替换模式, 可视选择模式, 命令模式.
 
普通模式 --> 插入模式
    i/I:  在光标前面/行首插入
    a/A: 在光标后面/行尾插入
    o/O: 在下/上一行行首插入
    s 删除光标所在字符并开始插入(具体用法看x)
    c 开始删除, 之后进入插入模式(具体用法看d)
对于GVim,  插入模式和在windows下一样, 各种快捷键都能用. 另外,  在普通模式下,  ctrl+s依然是保存
 
普通模式 --> 替换模式 
   r: 替换光标所在的字符
   数字r: 将光标所在向后n个字符都替换掉
   R: 从光标所在字符开始替换, 按esc回到普通模式
 
普通模式 --> 命令模式
    按冒号键.
 
普通模式 --> 命令模式
    按 v 键.
 
插入模式, 命令模式 可视选择模式 --> 普通模式
    按esc

普通模式

进入gvim后的默认模式, 在这种模式下, 无法输入, 只能移动光标, 或对文本进行操作.

移动

    h j k l: 左下上右移动
    数字 h j k l: 左下上右移动n下
    w/e: 移动到下一个单词开头/结尾
    b/B(ge): 移动到上一个单词开头/结尾
    f/t a: 在当前行, 移动到下一个出现a的位置/前
    F/T a: 在当前行, 移动到上一个出现a的位置/前
    数字f/t a: 在当前行向后移动到第n次出现a的位置/前
    数字F/T a: 在当前行向前移动到第n次出现a的位置/前
    0/$: 定位到行首/行尾
    ^/g_: 定位到非空格的行首/行尾
    %: 在两个匹配的符号((, ", {)等等中切换(光标需先移动到其中一个符号,  如果不在, 则会向后找到最近的一个)
    数字%: 按照百分比定位文档 的位置
    G: 定位到最后一行行首
    行号G: 定位到对应行号行首
    gg: 移动到第一行行首
    H: 定位到当前屏幕的最上边
    M: 定位到当前屏幕的中间
    L: 定位到当前屏幕的最下边
    ctrl+u/d: 向上/下滚动半屏
    ctrl+f/b: 向上/下滚动整屏
    zz: 把当前行置为屏幕正中间
    J: 将下一行移动到这一行末尾(合并当前行和下一行)
    关于数字键: 数字+命令表示执行多次操作, 数字一般放在命令之前.
 
    >>/<<: 当前行增大/减小缩进
    ==: 当前行自动进行缩进
 
    ``: 反单引号, 在两个跳转点之间切换, 如果你原先处在33行, 跳到了55行, 使用这个命令可以回到33行, 多次使用就是来回切换,
        注: j, k导致的跳转不可, 并且需要是不在同一行内的位置间的切换
    ctrl+o/i: 跳转到上一次/下一个光标停留位置(不在同一行内, 且不是hjkl导致的光标移动)

查找/搜索

在普通模式下输入 / , 即可对文本进行查找.
    /xxx: 在全文中查找xxx, 并高亮显示, 字符.*[]^%/?~$ 有特殊意义, 需要用转义
    ?xxx: 和/效果一样, 只是查找方向反向
    N/n: 在高亮的选中处之间前后切换, 前面可以加数字, 表示第n次出现的位置
    vim会记录已经查找过的内容, 再次查找时, 可通过上下键来切换
    #/*: 移动到上一个/下一个与光标所在单词相同的单词
    /<xxx>: 匹配完整的单词, 如果某单词中只是包含xxx, 不会被匹配上
 
模式搜索(正则表达式搜索):
    ^ 表示一行的开头, $ 表示一行的结尾, ^the就表示位于行首的the
    . 表示任意字符, 如果想查找的就是. , 则需要转义
 
一个有用的命令: nohlsearch, 此命令可以取消当前的高亮, 简写 nohl

复制, 剪切, 删除, 粘贴

在vim中, 剪切和删除的效果是一样的, y复制, x剪切, p粘贴.
注: 几乎所有的移动, 复制, 粘贴命令前面都可以加数字, 表示重复的次数, 也几乎都可以加上移动键, 表示向某个方向复制/剪切 .
(下列命令中其实是没有中间的空格的, 这里只是为了方便阅读)
    y: 开始复制
    yy/Y: 复制当前行
    行号yy: 从当前行开始, 复制多行
    y 0/$: 从光标处复制到本行开头/末尾
    y w/e: 复制一个单词, 或从光标处复制到本单词末尾
    yt a: 从光标出开始复制, 直到遇见a, a不复制
yG: 从当前行开始复制直到最后一行
yyg: 从当前行开始复制直到第一行
   
    x: 剪切/删除光标所在的字符, 依然停留在普通模式
    X: 删除当前光标左边的字符
    数字 x: 剪切/删除从光标开始往后的n个字符, 依然停留在普通模式
   
    d: 开始剪切/删除(用法和y类似, 不多说了)
    dd: 剪切整行
    D: 剪切至行尾的内容(这点和y不一样)
    
    p: 粘贴复制/剪切的内容到光标后面, 如果是整行的, 则粘贴到当前行的上面
    P: 粘贴复制/剪切的内容到光标前面, 如果是整行的, 则粘贴到当前行的下面
    数字p/P: 粘贴多次
    ddp: 其实就是删除当前行再粘贴了, 但是你会发现, 当前行和下一行换位置了
    xp: 其实就是删除当前光标所在字符再粘贴, 但是你会发现, 两个字符交换位置了
 

其他常用命令/快捷键

这里说的命令和命令模式中的命令不太一样, 其实就是一些按键, 只是在普通模式中, 它们有不同的用处.
 
    .: 普通模式中按 . 可以重复上次的命令, 除了u命令, 这个只能重复最近的一次命令, 比如先搜索出全文中的xxx, 然后cwyyy, 表示修改成yyy, 然后回到普通模式,
        n.n.n.一直按, 之后的xxx都会变成yyy, cwyyy这个命令就会一直重复
    u: 撤销上次操作, U: 行撤销, 可以撤销所有在最近行上的编辑操作.
    ctrl+r: 恢复上次操作(GVim中, ctrl+y也可以, 但它是windows中的快捷键)
    ctrl+i: 有时候vim中的有些文字会花掉, 此快捷键可以刷新视图
    gU/gu: 将选中的内容转化为大/小写
    ctrl+p: 自动补全之前编辑过的单词, 词组
    ZZ: 退出当前编辑的文件.
    行号1, 行号2>>: 从行号1到行号2向右移动一个tab
    行号1, 行号2>>: 从行号1到行号2向左移动一个tab
 

可视选择模式

在普通模式中按 v 键可进入可视化选择模式, 按 esc/v 退出, 同时选择的内容会被复制.
普通模式中按 V 键进入整行可视化选择, 再按 esc/V 退出, 同时选择的内容会被复制.
在可视化选择模式中, 移动键, 数字键, 剪切, 复制都是可以使用的.
    ctrl+q: 块可视化选择, 其实应该是ctrl+v, 但是对于windows里的GVim, 这个是粘贴, 所以不能用.
    gg, 然后ctrl+q(ctrl+v), 然后按G, 就可以选择文本的第一列
    o: 在(块)可视化选择状态下, 使光标移动到选择区域的另一头
    O: 在块可视化选择状态下, 使光标移动到这一行的另一头

命令模式

在普通模式下按 : 键进入命令模式, 光标会在编辑器底部显示, 输入命令回车即可.

常用命令

    w: 保存不退出
    wq/x: 保存退出
    q/q!: 不保存退出/强制不保存退出, 在任何命令后加 ! 表示强制执行此命令.
    e!: 放弃所有修改, 载入文件的初始状态, 慎用!
    pwd: 显示当前目录
    !shell指令: 执行shell(dos)指令
    r!shell指令: 将shell(dos)指令的执行结果写到当前行的下面
    行号1, 行号2d: 删除从行号1到行号2的内容, y也同样适用.
    行号: 定位到对应行号.
 
在命令模式里按上下箭头可以切换之前输入的命令

编辑多个文件

    e/edit 文件路径: 在当前标签页中打开文件, 路径中使用/或都可以,
        可使用tab键自动补全文件名.也可以一次打开多个文件, 文件路径中间以空格隔开
    previous/next: 切换到上一个/下一个打开的文件
    wprevious/wnext: 保存当前文件, 然后切换到上一个/下一个打开的文件
    bp/bn: 在当前标签页中切换上一个/下一个文件
    vim -R filename, 以只读方式打开文件

分割窗口

    split: 在当前窗口上方分割一个窗口, 新窗口中依然是当前文件
    new: 分割出新的空窗口
    split filepath: 在新窗口打开文件
    new filename: 在新窗口中编辑文件
    split, new命令都可以在前面加上数字, 表示新窗口的高度(行数)
    ctrl+w w: 在两/多个窗口键切换
    ctrl+w +/ctrl+w -: 当前窗口扩大/缩小一行, 前面可以加数字, 表示扩大/缩小多行
    数字 ctrl+w _: 将窗口变为指定高度
    q/cloase: 退出当前窗口
    wall/wa: 全部保存, qall/qa, 全部关闭
    only: 关闭其它所有窗口, 只保留当前窗口
    ctrl-w h 到左边的窗口
    ctrl-w j 到下面的窗口
    ctrl-w k 到上面的窗口
    ctrl-w l 到右边的窗口
    ctrl-w t 到顶部窗口
    ctrl-w b 到底部窗口
    ctrl-w h, j, k, l, 左右上下移动窗口

标签页

一般来说tabe, tabedit, tabnew的作用是一样的, 下面都用tabe, 除非有特殊情况
    tabe: 打开新的标签页
    tabe d:/xxx: 在新标签页中打开文件
    tab: 后面跟可以打开新窗口的命令(如 help), 这样可以在新标签页打开新窗口, 如 tab help

替换

替换的基本表达式 [range]s/from/to/[flags], 表示将range范围的from替换成to, flags匹配范围
    s/aaa/bbb/: 表示把当前行的第一个aaa替换成bbb, 不指定flag就只替换第一个
    %s/aaa/bbb/g: 把全文中的所有aaa替换成bbb, g的意思是指全部匹配的
    行号1, 行号2s/aaa/bbb/g: 把行号1和行号2之间的aaa替换成bbb
    行号1, 行号2s/^/aaa/g: 把行号1和行号2之间的行前面都加上aaa(即, 可以使用正则)
    另外, .代表当前行, $  表示最后一行
    行号1, 行号2s/^////g: 从行号1和行号2之间的行都加上//注释(这是因为/有特殊用途, 需要转义)
    行号1, 行号2s////g: 从行号1和行号2之间的行都去掉//注释
 
另一种转义的方法是, 使用+代替/, /正常使用, 如 4, 8s+aa/bb+aa or bb+





原文地址:https://www.cnblogs.com/gaoxiaoyuan/p/3817979.html