Vim基本命令

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 “1P 0用于复制专用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 跳转到文件首行
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(缩进行数))

增删改查等常规操作

删除、复制、粘贴

  • 对比:

    Windows Vim 不同处
    cut delete 剪切:和剪切相同,而不是直接删除
    copy yank 复制:等同于复制由于c用于修改(change)被迫选了yank
    paste put 粘贴:粘贴完全相同
基本操作:
按键操作 定义
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
x Practica lvim
p Practica lvim
行剪切粘贴
按键操作 缓冲区内容
{start} Line1 Line2
dd Line2
p Line2 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 :tabnext Vimrc中自定义快捷键
noremap :tabprevious Vimrc中自定义快捷键
:table 编辑标签中的某个文件
tabm 0/tabm 移动当前tab到第一个/最后一个
tabm{i} 移动当前tab到 i+1 位置

文本对象和宏

文本对象

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

快对象

textobject 说明
]/[ [block]
)/(、b block
>/<、>/< < > block
}/{ 、B Block
t tag 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 @a n到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)