Vim 常用操作

Vim的四种模式

Normal模式esc (默认)

插入模式

  • a i o A I O

命令模式

visual 可视化模式

  • v 字行
  • V 行选
  • ctrl+v 方块选择

命令模式

  • 显示行号::set nu
  • 语法高亮:syntax on
  • 搜索内容(所有结果)高亮:set hls
  • 边搜索变高亮:set incsearch
  • 竖向分屏::vs
  • 横向分屏::sp
  • 退出横竖分屏::q
  • 全局替换::% s/原内容/替换内容/g
  • 重新加载并且不保存当前文件: :e

d删除 y复制 p粘贴

快速纠错:(在很多地方通用)

  • ctrl + h 删除上一个字符
  • ctrl + w 删除上一个单词
  • ctrl + u 删除当前行

快速移动:(终端下通用)

  • ctrl + a 移动到行头
  • ctrl + e 移动到结尾
  • ctrl + b 往前移动
  • ctrl + f 往后移动

替代esc案件:

  • Ctrl + c (可能会中断某些插件)
  • Ctrl + [

快速跳转到你最后一次编辑的地方并进入插入模式:

  • Normal模式下 gi

移动

VIM下的移动:h j k l

.           ^ k 
.       
.   < h              l > 
.
.           v j 

记忆提示: h 的键位于左边,每次按下就会向左移动 l 的键位于右边,每次按下就会向右移动 j 键看起来很像一支尖端方向朝下的箭头

单词之间的移动

  • w / W移动到下一个word/WORD开头
  • e / E移动到下一个word/WORD结尾
  • b / B回到上一个word/WORD开头,可以理解为backword *word 指的是以非空白符分割的单词,WORD以空白符分割的单词

行间搜索移动

  • 使用 f + {char} 可以移动到{char}字符上
  • t + {char}移动到{char}的前一个字符
  • 如果第一次没搜到,可以用分号(;)/逗号(,)继续搜改行下一个/上一个
  • 大写的F表示反过来搜索前面的字符

水平移动

  • 0 移动到行首的第一个字符
  • ^ 移动到第一个非空白字符(0+w)
  • $ 移动到行尾
  • g _ 移动到行尾非空白字符

垂直移动

可以在句子(sentence)和段落(paragraph)间移动(不常用)

  • 使用括号 ( , ) 在句子间移动,可以用:help ( 来查看帮助
  • 使用 { , }在段落之间移动

页面移动

  • 移动到文件内容开头:gg
  • 移动到文件结尾:G
  • 快速返回:ctrl + o
  • 移动到屏幕开头:H
  • 移动到屏幕中间:M
  • 移动到屏幕结尾:L
  • 向上(upword)翻页:ctrl + u
  • 向下(forward)翻页:ctrl + f
  • 把屏幕置为中间:zz

快速删除(normal模式下)

  • 删除一个字符:x
  • 删除一个单词:dw / daw(d around word)/ diw

dw 当前位置到下一个单词的起始位置

daw 会同时删除单词后面的空格,

diw 只删除单词

  • 删除n个字符:n + x
  • 删除一行:dd
  • 删除n行: 数字n + dd / d + 数字n +d
  • 删除当前位置到下一个指定字符的位置:d + t + 字符
  • 删除当前位置到行尾:d + $
  • 删除当前位置到行始:d + 0
  • 删除选中内容: v / Ctrl + v + x/d 删除选中内容

快速修改

r (replace):替换字符

  • r + 字符:替换一个字符
  • R + 字符:输入替换后续内容

c (change):配合文本对象进行修改

  • c:删除一个单词并计入插入模式,类似 d
  • cw:当前位置到下一个单词的起始位置,并进入插入模式
  • * caw:会同时删除单词后面的空格,并进入插入模式
  • * ciw:只删除单词,并进入插入模式
  • c + t + 指定字符:删除当前位置到下一个指定字符的位置,并进入插入模式
  • C:删除整行进入插入模式

s (substitute):替换并进入插入模式

  • s:删除字符并进入插入模式
  • 数字 + s:配合数字使用删除指定字符长度并进入插入模式
  • S:删除整行并进入插入模式
  • 数字 + S:配合数字使用删除指定行数并进入插入模式

查询单词

  • / 前向搜索
  • ? 反向搜索 (下面的Nn#*会往反方向进行移动)
  • N 搜索上一个
  • n 搜索下一个

移动到上一个(移动到某个字符上时,会自动匹配单词)

移动到下一个(移动到某个字符上时,会自动匹配单词)

替换命令 substitute(代替)

  • :[range]s[ubstitute]/{pattern}/{string}/[flags]

    • range 操作的范围 比如:10,20 表示10-20行,

    • % 表示全部 pattern 要替换的模式;例如:精确的匹配一个单词 :% s/<内容>//g

    • string 替换成的文本

    • flags 替换的标志位

      常用的标志位 g (global) 表示全局范围内执行 c (confirm) 表示确认,可以确认或者拒绝修改 n (number) 报告匹配到的次数而不替换,可以用来查询匹配次数

多文件操作

Buffer:打开的一个文件的内存缓冲区

Buffer之间的切换

  • :ls 列出当前的缓冲区
  • :bn 跳转到第n个缓冲区
  • :bpre / :bnext / :bfirst / :blast 分别跳转到上一个/下一个/第一个/最后一个缓冲区 (可以使用tab命令补全 :bp+tab => :bpre
  • :b buffer_name (一般是文件名称)加上tab补全来跳转

Window:Buffer可视化的分割区域

  • 水平分隔:<Ctrl + w> s 或者 :sp

  • 垂直分隔:<Ctrl + w> v 或者 :vs

  • 切换窗口:

    • <Ctrl + w> w 在窗口间循环切换
    • <Ctrl + w> h 切换到左边的窗口
    • <Ctrl + w> j 切换到下边的窗口
    • <Ctrl + w> k 切换到上边的窗口
    • <Ctrl + w> l 切换到右边的窗口
  • 重排窗口:

    • <Ctrl + w> = 所有的窗口等宽登高
    • <Ctrl + w> _ 最大化活动窗口的高度
    • <Ctrl + w> | 最大化活动窗口的宽度
    • [N]<Ctrl + w>_ 把活动窗口的高度设置为[N]行
    • [N]<Ctrl + w>| 把活动窗口的宽度设置为[N]列
  • 窗口移动:

    • <Ctrl + w> L 窗口移动到左边
    • <Ctrl + w> H 窗口移动到右边
    • <Ctrl + w> K 窗口移动到上边
    • <Ctrl + w> J 窗口移动到下边

Tab:组织窗口为一个工作区

  • :tabe[dit] {filename} 在新标签页中打开{filename}
  • <Ctrl + w> T 把当前窗口移到新的标签页
  • :tabc[lose] 关闭当前标签页及其中的所有窗口
  • :tabo[nly] 只保留活动标签页,关闭其他活动标签页
  • :tabn[ext] {N}{N}gt 切换到编号为{N}的标签页
  • :tabn[ext]gt 切换到下一个标签页
  • :tabp[revious]gT 切换到上一个标签页

文本对象操作方式

[number] [text object]

number:次数
command:命令 如:d(elete)删除 c(hange)修改 y(ank)复制
text object:文本对象 如:单词w , 句子s , 段落p

操作练习:

  • iw 标识 inner word。

    viw 选中单词
    diw 删除单词
    ciw 修改单词
    yiw 复制单词

  • aw 选中单词包括前后空格 a word
    vawdawcawyaw

  • i+符号 快速删除括号内的内容,di)

复制粘贴

Normal模式下:

  • 复制y(ank)
  • 粘贴p(ut)
  • 剪贴 d+p
  • 复制一行 yy
  • 删除一样 dd

vim复制带有缩进的代码粘贴可能会造成错乱

可以使用:set paste:set nopaste 解决

寄存器

vim里操作的是寄存器而不是系统剪切板,这和其他编辑器不同;默认我们使用 d 删除或者 y 复制的内容都放到了“无名寄存器”,通过 {register} 前缀可以指定寄存器,不指定默认使用无名寄存器

寄存器类别:

类别 符号 描述
未命名寄存器 " 上一次复制或删除的文本;yy默认就是使用的无名寄存器
数字寄存器 0-9 文本复制和删除历史
行内删除寄存器 - 删除少于一行的文本
命名寄存器 a-z,A-Z 存放文本
只读寄存器 % 当前文件名
. 最近插入的文本
: 最近执行的命令行
轮换缓冲寄存器 # 交替文件的名字
表达式寄存器 = 返回表达式结果
选择和拖拽寄存器 * 系统剪切板
+ 系统剪切板(X11)
~ 拖拽的文本
黑洞寄存器 _ 彻底删除的文本
搜索模式寄存器 / 最近搜索模式

寄存器:

  • 复制:normal模式下 "[寄存器名称][复制或剪切命令] 复制内容到寄存器中

    例如:
    复制一个单词到寄存器a里面 "ayiw
    复制一行内容到寄存器b里面 "byy
    删除当前行到寄存器c中 "cdd

  • 粘贴:normal模式下 "[寄存器名称]p 粘贴寄存器的内容

    粘贴寄存器a中的内容到当前光标后面 "ap

  • 查看寄存器

    查看某个寄存器中的内容 :reg [寄存器名称]
    查看所有寄存器中的内容 :registers:reg

【前置条件】验证是否支持clipboard

  • :echo has('clipboard') 输出1说明可用直接使用系统剪切板

系统剪切板:

  • 直接使用系统剪切板 :set clipboard=unnamed
  • Insert模式下使用系统剪切板粘贴:[Ctrl+R] +

宏(macro)

宏可以看成是一系列命令的集合;

我们可以使用宏[录制]一系列操作,然后用于[回放];

宏可以非常方便地把一系列的命令用在多行文本上;

使用方式:

  1. normal模式下用q来录制,同时也是q结束录制;
  2. 使用q{register}选择要保存的寄存器,把录制的命令保存其中;
  3. 使用@{register}回放寄存器中保存的一系列命令;

示例:在每行一个网址的多行数据文本里面,给每行的网址加上双引号
操作:

  1. Normal模式下,qa 录制宏操作到a寄存器

  2. gg移到第一行文本 ,0:N回到行首

  3. i进入插入模式,输入

  4. esc 退回Normal模式,$回到行尾

  5. a进入写入模式,输入

  6. esc 退回Normal模式,q保存,完成宏录制

  7. V选中单行,G移动到行尾并选中多行

  8. :进入命令行模式 输入normal @a

    完成整个操作

    用其他方式完成示例:

  9. Normal模式下,V选中单行,G移动到行尾并选中多行

  10. :进入命令行模式 输入normal I

  11. :进入命令行模式 ctrl+p 复制上一条命令并修改为:normal A

    完成整个操作

补全

简介:根据当前环境上下文由编辑器【猜】你想要输入的东西

普通关键字 当前缓冲区关键字 包含文件关键字 <C-]> 标签文件关键字 字典查找 整行补全 文件名补全 全能(Omni)补全 (需要开启filetype :filetype on

常用的三种补全类型:

  • ctrl+n 和 ctrl+p 补全单词
    (ctrl + n 向下选择,ctrl + p向下选择)

  • ctrl+x ctrl+f 补全文件名

  • ctrl+x ctrl+o 补全代码,需要开启文件类型检查,安装插件

  • 快速插入文件名::r! echo %

  • 快速插入当前文件路径::r! echo %:p

配色方案

  • 显示当前的主题配色,默认是default :colorscheme
  • 显示所有的配色 :colorscheme <ctrl + d>
  • 修改配色 :colorscheme 配色名

更多的配色方案:https://github.com/flazz/vim-colorschemes
配色方案放到 ~/.vim/colors 文件夹中,没有则创建

配置文件

所在位置 ~/.vimrc vim设置 常用设置,比如::set nu 设置行号,colorscheme hybrid设置主题; 常用映射,比如::noremap w :w 保存文件 自定义vimscript函数 插件配置

插件管理器

常用的插件管理器:vim-plugVundlePathogenDein.Vimvolt

从性能、易用性、文档角度推荐使用 vim-plug

Vim-plug

【获取】

cd ~/.vim/
git clone https://gitee.com/wk-zys/vim-plug.git

【安装】

mkdir -p ~/.vim/autoload/
cp plug.vim ~/.vim/autoload/plug.vim

【配置】

vim ~/.vimrc

append code
call plug#begin('~/.vim/plugged')
Plug 要安装的插件                                        ## 安装后,会多出 ~/.vim/plugged 目录,里面是对应的插件
Plug 'mhinz/vim-startify'
Plug 'scrooloose/nerdtree'
call plug#end()

【使用】

进入vim中使用PlugInstall安装自己预先在.vimrc中填写的插件

PlugInstall <tab>

vim插件

查看当前文件名和文件路径

正常模式下 :fCTRL+G

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇