vim基本操作

Vim简介:

  • Vim是一个Unix以及类Unix文本编辑器。
  • 特点:功能强大、高度可定制。

vim 和 vi 区别:

  • Vim = Vi + IMproved
  • Vim相对于Vi优点:
    • 多级撤销
    • 语法加亮可自动补全
    • 支持多种插件
    • 通过网络协议(HTTP/SSH)编辑文件
    • 多文件编辑
    • Vim可以编辑压缩格式文件(gzip、zip等)

Vimrc 配置

Vimrc 概述:

  • rc = run command
  • 分为系统级vimrc 和 用户级vimrc
  • 每一行作为一个命令执行

Vimrc 使用:

  • 版本:version

    • vim test.txt 创建一个txt文件 输入esc + shift + :输入version查看版本。

    • 可以看到系统文件跟用户文件vimrc所在的位置:

      system vimrc file: "/etc/vimrc"
           user vimrc file: "$HOME/.vimrc"
       2nd user vimrc file: "~/.vim/vimrc"
            user exrc file: "$HOME/.exrc"
      
      
    • 第二种打开::e ~/.Vimrc(.Vimrc文件是自己创建的,Vim会自动搜索到)

  • 注释:'单引号

  • 根据每一行的开头都显示行号:

    • 开启::set number
    • 关闭::set nonumber
    • 简写::set nu
  • 设置光标移动位置的时候,右下角显示页码详细信息:

    • 开启::set ruler
    • 关闭::set noruler
    • 简写::set rul
  • 设置查看历史记录:

    • 设置历史记录1000页::set history=1000
  • 查找的时候匹配值会高亮显示:

    • 开启::set hlsearch 输入完/后面跟要查找的值,你会发现高亮匹配。
    • 关闭::set nohls
    • 简写::set hls
  • 查找的时候边输入搜索,边高亮显示:

    • 开启::set incsearch 输入完/后面跟要查找的值,你会发现一边搜索一边高亮提示
    • 关闭::set noincsearch
    • 简写::set inc
  • 忽略查找选项的大小写:

    • 开启::set ignorecase
  • 自动缩进功能:

    • :set autoindent
    • :set smartindent

Vim不同模式

四种模式:

普通模式
  • 打开默认模式
  • 移查删改
可视化模式:
  • 对一整块区域操作:按v
插入模式:
  • 添加文本:按i
命令模式:
  • 命令模式跟普通模式有些相似
  • esc +:+输入的命令

基础入门

Vim 寄存器

类型含义表达方式举例特点
无名寄存器默认寄存器“”“” p=p会被最后一条覆盖
数字寄存器“+{0-9}缓存最近10次操作”0 “{1-9}”0P “1P0用于复制专用1-9用于最近9次行删除活修改记录
有名寄存器26英文字母命名有名寄存器”[a-z]/[A-Z]"ayw"A会通过^J追加到“a寄存器中
黑洞寄存器有去无回”_"_dw只想删除而不是覆盖无名寄存器
  • 查看寄存器::reg

Vim移动、跳转与缩进

移动:

光标的移动
h左移
l右移
j下移
k上移
^/0移动到行首/包含缩进空格
$移动到行尾
单词和字符串移动
w(识别特殊字符)/W(不识别特殊字符)正向移动到一个单词开头
b/B反向移动
e/E正向移动下一个单词结尾
ge反向

跳转:

Ctrl+f/F下一页
Ctrl+b/B上一页
Ctrl+d/u向下/上翻半页
gg跳转到文件首行
<Line_Number>gg/G跳转到指定行
G跳转到文件最后一行
{g}+Ctrl-g/G查看文件信息/{g}更加详细

缩进:

>>/:>右缩进
m,n /:m>(n-m+1)m到n行缩进(:25,66 >)
m>n等价于命令:m,m+n-1>m行开始共n行缩进一次(:25>3(缩进行数))

增删改查等常规操作

删除、复制、粘贴

  • 对比:

    WindowsVim不同处
    cutdelete剪切:和剪切相同,而不是直接删除
    copyyank复制:等同于复制由于c用于修改(change)被迫选了yank
    pasteput粘贴:粘贴完全相同
基本操作:
按键操作定义
d = delete = cut剪切
y = yank ~copy类似于复制
p/P = put ~ paste粘贴到光标后/光标前
u = undo撤销之前操作
Ctrl+r = redo重做/恢复之前操作
基础操作:
按键操作定义
yw复制当前光标单词
y2w复制正向两个单词
p/P = put ~ paste粘贴到光标后/光标前
yy类似于dd复制当前光标整行
调换字符:
按键操作缓冲区内容
{start}Practica lvim
F{space}Practica lvim
xPractica lvim
pPractica lvim
行剪切粘贴
按键操作缓冲区内容
{start}Line1 Line2
ddLine2
pLine2 Line1
组合删除:
  • ([count]operation([Count]{motion}))
x/X删除光标下/前单个字符
dw(d = delete w = word)删除一个单词(必须再词首)
d{hjkl}删除上下左右一个操作前的字符
d$=D删除光标到行尾的字符
d^删除光标到行首的字符
  • 扩展:

    dd删除当前整行
    n{dd}向下删除n行(包括当前行)(5dd)
    5dw删除正向单词5次
    3w正向移动单词3次
    D3w正向删除3w动作
    2d3w正向删除3w动作 2次

修改、查找、替换

插入
按键操作定义
Shift+i/A插入模式并移动到行首/尾
a/i光标后/前插入
[n]O/o行前/后插入n次
[n] + i插入模式重复n次(5 i hello ESC)
转换
按键操作定义
~单个字符大小写转换
g ~ w单词大小写转换(必须再首行才可以操作)
g ~ $/g ~ ~整行大小写转换
gU/uw单词转换成大小/写
.对上一次操作的重复
查找
按键操作定义
F/f{char}反向/正向查找单个字符
t{char}查找字符前一个字符
dt{char}/df{space]}删除光标到查找字符间字符
/{char}命令查找
替换
查找替换
  • 语法[range]s[ubstiture]/{pattern}/{string}/[flags]

    按键操作定义
    s/going/rolling/g当前行所有goging替换成rolling(: s/run/sss)
    %s/going/rolling/g%匹配所有范围(:%s/run/sss)替换全局
操作替换
按键操作定义
Shift+r/R替换模式
r单个字符替换
cw修改单个单词
c$/C类似于d操作符修改光标之后行内内容

高级功能

缓冲区与多文件编辑

缓冲区

  • Buffer 是内存中一块缓冲区域,用于临时存放Vim打开过的文件。
缓冲区列表
  • :files
  • :buffers
  • :ls
    • 打开以后会看到显示的信息如下:
      • 1,2,3,4,5,6:缓冲区序列号
      • #/%a:指示状态
      • Buf-ant.txt:文件名
      • 第一行:光标位置
缓冲区列表指示状态
标记含义
a激活缓冲区,缓冲区被加载且显示
h隐藏缓冲区,缓冲区被加载但不显示
%当前缓冲区
#交换缓冲区
=只读缓冲区
+已经更改缓冲区
-不可改缓冲区,'modifiable’选项不置位
缓冲区列表操作
指令含义
:bp[revious]上一个缓冲区
:bn[ext]下一个缓冲区
:bf[irst]到第一个缓冲区
:bl[ast]到最后一个缓冲区
:buffer Number/File_name指定缓冲区
:ball编辑缓冲区
Ctrl + ^/b#切换前一个buffer(交换buffer)
缓冲区列表操作
指令含义
:qall!退出全部缓冲区
:wall!写入全部缓冲区
:badd添加一个新缓冲区,但不设置为当前缓冲区
:bd[elete]删除缓冲区
:n,m/%bd删除n到m编号/所有的缓冲区文件
:bufdo{CMD}bufdo set number
:E /:bd打开文件目录列表/返回到最初buffer

多窗口与标签分组

多窗口(分屏)

分屏操作
指令含义
Vim-O/on水平/垂直分屏 n:数据,o:Open(vim -o3 nihao_0*打开)
Ctrl + w c/q关闭当前窗口/最后一个窗口时退
Ctrl + w s上下分割当前打开的文件
:sp filename上下分割,并打开一个新的文件
Ctrl + w v左右分割当前打开的文件
:vsp filename左右分割,并打开一个新的文件
移动分屏和尺寸变动
指令含义
ctrl + w K向上移动
ctrl + w J向下移动
ctrl + w L向右移动
ctrl + w H向左移动
ctrl + w +增加高度
ctrl + w -减少高度
ctrl + w =让所有屏的高度一样

标签

  • 标签就是容纳一系列窗口的容器。(浏览器的标签)
标签操作含义
:tabnew新建标签页
:tabfind查找并在新标签页中打开文件
:tabs显示已打开标签页的列表
:tabclose关闭当前标签页
:tabonly仅保留当前标签页打开
:tabn/p/first/last移动到下/上/第一/最后一个标签页
:tabm将当前标签页放置到指定位置
标签操作和命令键
指令含义
gt/T移动到下/上一个标签
{i}gt移动到i位置的标签
noremap :tabnextVimrc中自定义快捷键
noremap :tabpreviousVimrc中自定义快捷键
:table编辑标签中的某个文件
tabm 0/tabm移动当前tab到第一个/最后一个
tabm{i}移动当前tab到 i+1 位置

文本对象和宏

文本对象

  • {operator} {a} {object}
    • 包含尾部间隔空格
  • {operator} {i} {object}
    • 不包含尾部单词间隔空格

快对象

textobject说明
]/[[block]
)/(、bblock
>/<、>/<< > block
}/{ 、BBlock
ttag block: <> </ >

Visual mode

指令说明
viw选中单词
vis选中句子
vip选中段落
vi(选中圆括号中内容
vi[选中中括号中内容
vit选中标签中的内容

Visual mode (多层操作)

指令说明
v2i{选中两层d大括号之间的所有内容数字限定选择的嵌套层数
v3aw选择三个单词(包含中间的2个间隔空格)
v3iw选择三个单词(2个单词+间隔空格)
可将v选择操作指令替换为c、x、d、y等操作(operator),来针对文本对象操作。

  • Vim的Macro就是用来解决重复的问题。

简单操作

指令说明
qa开始录制宏存到寄存器a中
qA追加宏再a寄存器中追加
n@a执行n遍a寄存器中的操作
@@再执行一遍上一次操作
:n, mnormal @an到m 行执行j寄存器a宏操作
:let @a= ’编辑宏a寄存器
宏最佳操作:
  • 规范光标位置:0
  • 执行编辑和操作
  • 移动光标到容易回放的位置: j
操作模式:
  • 先插入(i):
  • qa:进行宏的录制
  • yy:复制,p:粘贴
  • ctrl + a: 进行+1
  • q:退出宏
  • 100@a:调用宏

宏保存

  • viminfo / vimrc file
  • 保存历史和非空寄存器
  • vim 启动时读取
  • 容易被覆盖

Visual(可视化)模式

  • 定义:再可视化模式下,可以对一个文本块的整体进行操作。

三种子模式:

v激活面向字符的可视模式
V/shift + v激活面向行的可视模式
Ctrl + v激活面向列块的可视模式
  • 字符->行->块

可视化操作:

操作符说明
gv重选上次的高亮选区
o切换选取边界

更多推荐

Vim基本命令