Vim语法

这篇具有很好参考价值的文章主要介绍了Vim语法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


常用

课程链接

Vim中的指令可以灵活组合使用

:help 查找文档

切换为后台Ctrl + z;切换为前台fg

Ctrl + D打开候选列表


Normal模式

进入Vim,默认Normal模式或使用Esc进入Normal模式

移动

单词间移动
移动到下一个word/WORD开头 w / W (移动到下一个word/WORD结尾 e / E
移动到上一个word/WORD开头 b / B
word是指以非空白符分割的单词,WORD是指以空白符分割的单词。

行间搜索移动
使用 f{char}可以移动到{char}字符上,t{char}移动到{char}字符的前一位字符
多个{char}间的切换用; / , 表示下一个 / 上一个
f搜索到光标行尾间的字符,F搜索到光标行首间的字符。

行间快速移动
0移动到行首第一个字符,使用0w起到和^相同的作用(^移动到行首第一个非空白字符)
$移动到行尾(g_移动到行尾非空白字符)

页面移动
gg / G 移动到文件的开头 / 结尾,ctrl + o快速返回
移动到屏幕的开头H (head),中间M (middle),结尾L (lower)
<C-b> / <C-f> 上 / 下翻页
<C-u> / <C-d> 上 / 下翻半页
zz 调整当前行到屏幕中间
zt 将光标所在行调整到屏幕上方
:n 跳转到第n
ma 标记到 a上,使用'a回到标记
'' 跳转到上次浏览的位置
'(单引号)是跳转到标记的字符上,` (键盘左上 ~ 符号)是跳转到该行上

屏幕滚动
zl 向右滚动一个字节的屏幕
zh 向左滚动一个字节的屏幕

删除

xd 删除选中部分,x可以用在一个字符上直接删除,d属于删除指令,要删除一个字符,需要dl
dw删除光标到单词的结尾,diw删除光标所在的单词,dd删除光标所在行,D 删除所在行光标之后的所有词
dt{char}删除光标到{char}的所有字符
d0 删除到行首,d$ 删除到行尾
2dd删除行,4x删除个字符。数字+命令 表示多次重复。
ggdG清空屏幕
. 模仿上一次删除操作

修改

r (replace) 替换一个字符,保持Normal模式; R 替换多个字符,保持Normal模式
s (subtitute) 删除当前字符,并进入Insert模式;S删除当前行,并进入Insert模式
c (change)
cw删除单词,并进入Insert模式;C删除光标到行尾,并进入Insert模式;
ci( 修改()中的内容,()也可以是{} [] <>,但是对于c++中的流操作符<<就不能使用ci<来修改其内容,因为是两个<相连,可以使用c%进行修改,但是光标要置于<后。

查找

/xxx 匹配到xxx的字符上,然后通过使用n / N 跳转到一个 / 一个

复制粘贴

y (yank)复制 yiw复制一个单词,yy复制一行,y0复制光标到行首
d (delete)剪切
p (put)粘贴,p粘贴到光标之后,P粘贴到光标之前

vim在复制、剪切过程中的文本内容是存在寄存器中,而不是系统剪切板。
xp :用x删除一个字符,将字符放到无名寄存器中,再使用p粘贴,实现字符对调。

对于寄存器的使用,通过:{register}可以指定寄存器,有多个寄存器,如az都可以设置为寄存器,可以作为剪贴板来使用。如"ayiw表示复制一个单词到寄存器a中,"bdd表示删除当前行到寄存器b中。
使用:reg a显示寄存器a中保存的内容
使用"bp表示粘贴寄存器b中的内容
""表示无名寄存器,默认就是用的无名寄存器,因此可以省略不写
"0表示复制专用寄存器,默认复制到无名寄存器时,也会复制到专用寄存器
"+表示系统剪贴板,用于和vim外进行交互用的寄存器

清理寄存器的内容 :let @"='',让无名寄存器的内容赋为''空字符

当在客户端进行复制后,在服务端进行粘贴时,无法使用寄存器进行交互,因此可以使用:set clipboard=unnamed设置服务器中的vim,再直接使用p来进行粘贴

颠倒两行:exe "normal! ddpk"

  • :exe :这是一个 Ex 命令,用于执行后面的字符串作为 Vim 命令。
  • "normal! ddpk":这是要执行的字符串。在这个命令中,"normal"Vim 将后面的字符串作为普通模式下的按键操作来执行。! 表示强制执行命令,忽略任何可能的映射。
  • dd :删除当前行,并将其保存到剪贴板中。
  • pk:按下 p 键,将剪贴板中的内容(之前删除的行)粘贴到光标当前位置的上一行。

撤销

u撤销操作,U撤销某一行最近所有修改,<C-r>撤销u


Insert模式

i(insert)光标之插入,I插入
a(append)光标之插入,A插入
o(open a line below) 在下一行插入O在上一行插入

进入该模式后,<C-h> 删除上一个字符,<C-w> 删除上一个单词,<C-u> 删除光标前当前行所有字符(同理于终端

可以使用 <C-c><C-[>,从 Insert 模式切换到 Normal 模式
可以使用 gi,从 Normal 模式切换到 Insert 模式中最后编辑的位置

复制粘贴

正常文本的复制粘贴<C-c> <C-v>
<C-r>{register}对对应寄存器中的内容进行粘贴


CMD模式

通过 : 进入命令行模式

:w (write)写入
:wq (write quit)写入并退出
:q 退出编辑器,如果存在未保存的修改,Vim会提示保存放弃修改。如果没有做任何修改或已保存修改,Vim将立即退出。
:q! 也用于退出编辑器,但是它会强制退出,丢弃所有未保存的修改
因此,如果你有未保存的修改,应该首先使用:q命令尝试退出编辑器并保存修改。只有在确定不再需要这些修改时,才应使用:q!命令强制退出。

:vs (vertical split)竖直分屏
:sp (split)水平分屏
:set nu (set number)设置行号

替换

支持正则表达式
语法::[range]s[ubtitute]/{pattern}/{string}/[flags]

[range]表示范围,如10,20表示10到20行,%表示全部

{pattern}表示需要替换的文本

{string}表示替换后的文本

[flags]
g (global) 表示全局范围执行
c (confirm) 表示需要确认是否修改
n (number) 表示匹配到的次数,而不进行替换

:% s/a/b/g 把所有的a替换成b
:1,6 s/a/b/g 把1到6行的a替换成b
:1,6 s/a//n 1到6行中查找有多少个a。但可能会对a替换成空字符,可修改为:1,6 s/a/&/gn

%可以有配对的功能

使用正则表达式
:% s/\<a\>/b/g 把所有的单词a替换成b,而不替换含有a字符的单词
若要搜索以 example 开头的单词,可以输入 /\<example
若要搜索以 example 结尾的单词,可以输入 /example\>


Visual模式

进行可视化选择
Normal模式输入v,进入visual选择。使用V选择整行,使用<C-v>进行块状选择。
选中使用U转换成大写字母,u转换成小写字母
>/< 右 / 左移
S" 选中的文本加上双引号


多文件间的转换

Buffer

Buffer指打开的一个文件的内存缓冲区
修改时针对Buffer的内容修改,:w再将修改内容写入文件。
每个文件对应一个Buffer,使用:ls会列举当前缓冲区,再使用:b n跳转到第n个缓冲区。
:bpre :bnext :bfirst :blast 分别跳到对应的缓冲区中,或者用:b buffer_name 加上Tab补全来跳转。

通过:ls来获得缓冲区中对应文件的信息、编号,可以通过:b1跳到编号为1所对应文件的Buffer中去。
也可以用:e buffer_name打开对应的文件。

Window

WindowBuffer可视化的分割区域。
<C-w>v 垂直分割,同:vs
<C-w>s 水平分割,同:sp
<C-w>w 窗口间循环切换
<C-w>h 切换到左侧窗口,<C-w>H 将窗口移动左侧
<C-w>j 切换到下侧窗口,<C-w>J 将窗口移动下侧
<C-w>k 切换到上侧窗口,<C-w>K 将窗口移动上侧
<C-w>l 切换到右侧窗口,<C-w>L 将窗口移动右侧

Tab

Tab可以把Window组织为一个工作区


文本对象

可以快速操作一个单词、一个句子和一个段落等。
语法:[number]<command>[text object]

[number]表示次数
<command>表示命令,如d c y
[text object]表示要操作的文本对象,如w 单词,s句子,p段落


iw (inner word) viw表示选择当前单词,vi"表示选择"中的内容
aw (around word) vaw表示选择当前单词以及单词后的空格


一系列命令的集合:可以使用宏录制一系列操作,再用于回放这些操作,用于批量的编辑。

Normal模式下,使用q来开启录制,再使用q来结束录制。可以使用q{register},来指定对应的寄存器来存放指令。使用@{register}回放

如,有多行网址,要给每一行的网址加上双引号。

https://www.example1111.com
https://www.example22.com
http://www.example333.com
http://www.example4444.com
https://www.example55555.com
http://www.example666666.com
https://www.example7777777.com
http://www.example88.com
https://www.example99999.com
http://www.example1000000.com

qa 开启录制宏到a寄存器中
光标置于第一行,I" <C-[> A" <C-[> q ,其中I光标置于行首,插入"<C-[>退出Insert模式,A插入到行尾,插入",退出Insert模式,q结束录制。 完成了一个
可以使用j@a,让下一行也通过宏完成指令。
还可以使用进入visual模式,VG选择其余所有行,使用:进入命令行模式,vim会显示:'<,'>,使用normal模式下的指令,输入normal @a。命令行整体为:'<,'>normal @a,即可完成操作。

整体修改只需
:1 qa I" <C-[> A" <C-[> q :2 VG :normal @a

"https://www.example1111.com"
"https://www.example22.com"
"http://www.example333.com"
"http://www.example4444.com"
"https://www.example55555.com"
"http://www.example666666.com"
"https://www.example7777777.com"
"http://www.example88.com"
"https://www.example99999.com"
"http://www.example1000000.com"

其实可以不使用宏也来完成该需求,VG先全选,输入:normal I",给所有行首加入",进入命令行模式:<C-p>输出上一步操作,将I"改为A"即可。
将宏的批量修改改成统一修改,由于录制宏中需要两次退出Insert模式,因此需要两次进入normal模式。


补全

常见补全
<C-n><C-p> 补全单词,在待补全选项中,可以通过使用操作选<C-n>下一个和 <C-p> 上一个,而不使用方向键来选择。
<C-x><C-f> 补全文件名
<C-x><C-o> 补全代码,需要开启文件类型检查,安装插件


操作键位图

Vim语法,工具、工具库,vim,编辑器,linux


配置

:set number等配置的持久化,而不是每次打开一个文件都要重新配置。通过对vimrc的设置,完成此需求。
建立一个~/.vimrc配置文件,通过其编写对vim的设置。

  • 常用设置::set nu设置行号,colorscheme hybrid设置主题
  • 常用的vim映射:noremap <leader>w :w<cr>保存文件
  • 自定义的vimscript函数和插件的配置

" 表示注释


映射

vim的映射比较复杂,因为有多种模式。在~/.vimrc中,通过使用leader键来进行组合,常用的leader键是使用, 或者<space>空格 let mapleader = ','

命令 模式 描述
map 所有模式 创建非递归映射
noremap 所有模式 创建递归映射
com! 命令行模式 定义自定义命令
imap 插入模式 创建插入模式下的非递归映射
inoremap 插入模式 创建插入模式下的递归映射
nmap 正常模式 创建正常模式下的非递归映射
nnoremap 正常模式 创建正常模式下的递归映射
vmap 可视模式 创建可视模式下的非递归映射
vnoremap 可视模式 创建可视模式下的递归映射
xmap 选择模式 创建选择模式下的非递归映射
xnoremap 选择模式 创建选择模式下的递归映射

inoremap <leader>w <Esc>:w<cr>

  • inoremap : (i insert, nore no recursive, map map) 插入模式非递归映射
  • <leader>w 等价使用,w
  • <Esc>:w<cr> 等价表示为在Insert模式,先使用<Esc>,进入Normal模式,再进入命令行保存文件:w,最后再使用回车<cr>

使用,w映射为在Insert模式保存文件。

如何使得自定义的vimrc配置文件生效,类似与.bashrc一样,通过输入:source ~/.vimrc来使其生效或者退出,重新进入。

noremap <C-h> <C-w>h,通过<C-h>来实现移动到左侧窗口。

有一种情况,如下

:nmap - dd
:nmap \ -

最后,会将\映射为dd。类似于递归的形式。因此,使用递归映射,行为有不确定性。比如安装的插件恰巧映射了不确定的行为。建议使用非递归映射

通过把vimrc配置放到git版本备库管理可以同步到其他电脑或服务器上。


插件

推荐使用vim-plug插件管理器,在.vimrc中使用如下命令

call plug#begin('~/.vim/plugged')
//...
call plug#end()

有需求就有供给,如何找到插件:

  • Google
  • vimawesome
  • 他人开源配置文件:SpaceVim,PegasusWang

//...的位置添加想要的插件内容,完成vimrc的修改后,执行:PlugInstall安装插件即可。

语法 网址 描述 指令
Plug 'mhinz/vim-startify' https://github.com/mhinz/vim-startify 开屏插件,可以显示最近打开的文件
Plug 'vim-airline/vim-airline'
Plug 'vim-airline/vim-airline-themes'
https://github.com/vim-airline/vim-airline 状态栏美化
Plug 'yggdroot/indentline' https://github.com/Yggdroot/indentLine 增加代码的缩进线条
Plug 'w0ng/vim-hybrid' https://github.com/w0ng/vim-hybrid vim配色
Plug 'preservim/nerdtree' https://github.com/preservim/nerdtree 文件目录树
Plug 'kien/ctrlp.vim' https://github.com/kien/ctrlp.vim 快速查找并打开文件 <C-p>打开搜索框
Plug 'easymotion/vim-easymotion' https://github.com/easymotion/vim-easymotion 快速查找 ss 查找指定的字符
查找name,通过ssna,将显示高亮部分,通过该部分上的字母将选择是哪一个字符
Plug 'tpope/vim-surround' https://github.com/tpope/vim-surround 成对编辑"" () name上加" : ysiw"you add a surrounding
删除"name"" : ds"delete a surrounding
"name""换成(:cs"(cs")change a surrounding
区别是前者()中间有空格( name ),后者()中间没有空格(name)
Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }
Plug 'junegunn/fzf.vim'
https://github.com/junegunn/fzf.vim 模糊搜索 :Ag [pattern]模糊搜索字符串
:Files [pattern]模糊搜索目录
使用<C-k>/<C-j>在列表中上 / 下移
Plug 'brooth/far.vim' https://github.com/brooth/far.vim 搜索、替换插件 :Far a b /path/to/files
/path/to/files中的a 全部替换成b
:Fardo开始替换
Plug 'preservim/tagbar' https://github.com/preservim/tagbar 代码大纲 :TagbarToggle,打开代码大纲
Plug 'lfv89/vim-interestingwords' https://github.com/lfv89/vim-interestingwords 高亮代码 选中想要高亮的单词
<leader>k高亮
n/N高亮间切换
<leader>K取消高亮
见github https://github.com/Shougo/deoplete.nvim 代码异步补全
Plug 'sbdchd/neoformat' https://github.com/sbdchd/neoformat 代码格式化 :Neoformat xxx
xxx为对应语言的格式化工具名称
详见github
Plug 'dense-analysis/ale' https://github.com/dense-analysis/ale 静态检查
Plug 'tpope/vim-commentary' https://github.com/tpope/vim-commentary 注释 :gcc注释和取消注释
Plug 'tpope/vim-fugitive' https://github.com/tpope/vim-fugitive Vim中使用Git命令 见github

脚本

vim对应的脚本vimscript

推荐书目笨方法学Vimscript


CLion插件

AceJump

默认键位为;,与ideaVim中的leader键位冲突,改为,文章来源地址https://www.toymoban.com/news/detail-553554.html

  • Ctrl + , 激活AceJump,输入任何字符,会显示出提示
  • Ctrl + , 连续点击两次,进入Declaration模式,相当于IDE的Navigate to。
  • Ctrl + , 连续点击三次,进入Target模式,会选取整个单词,该模式也可以通过Ctrl + Alt +,来激活
  • Ctrl + Shift + , 来导航到任意行,或者任意行首、任意行尾位置

到了这里,关于Vim语法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Linux】开发工具——vim多模式编辑器的入土&&设置sudoers白名单

    ========================================================================= 个人主页点击直达: 小白不是程序媛 Linux系列专栏: Linux被操作记 ========================================================================= 目录 前言: 基本概念 vim基本操作 [正常模式]切换至[插入模式] [插入模式]切换至[正常模式] [正

    2024年02月06日
    浏览(27)
  • Linux Vim文本编辑器-Vim常用命令

    距离上次Linux的学习,今天又是一个崭新的起点,我们用五天的时间学了一些Linux一些常用的操作命令,但掌握这些还是远远不够的,这个世界就是这样,将生于此,既是幸运也是不幸,只有不断地学习才能有自己的一席之地,话不多说,开始我们今天的Linux学习之旅。 目录

    2024年02月06日
    浏览(50)
  • Linux编辑器vim(含vim的配置)

    本篇文章,小编将介绍Linux编辑器–vim以及vim的配置。 正常/普通/命令模式(Normal mode) 控制屏幕光标的 移动,字符、字或行的删除 ,移动复制某区段及进入 Insert mode 下,或者到 last line mode 插入模式(Insert mode) -只有在 Insert mode 下,才可以做文字输入,按「ESC」键可回到命令行

    2024年01月25日
    浏览(48)
  • Linux编辑器---vim

    目录                 1、vim的基本概念         2正常/普通/命令模式(Normal mode)         2、1命令模式下一些命令(不用进入插入模式)         3插入模式(Insert mode)         4末行/底行模式(last line mode)         4、1底行模式下的一些命令         5、普通用户无法进行

    2024年01月20日
    浏览(56)
  • Linux编辑器vim

    目录 一、vim的几种模式 1、命令模式 2、编辑/插入模式 3、底行模式 ①增加行号 ②分屏操作 ③不退出vim执行命令 4、替换模式 二、vim的常见命令 1、yy命令 2、p命令 3、dd命令 4、u命令 5、Ctrl + r命令 6、shirt+g命令 7、gg命令 8、shirt+6命令 9、shirt+4命令 10、w,b命令 11、h,j,k,

    2024年02月09日
    浏览(74)
  • 【linux】Linux编辑器-vim

    关于 rzsz 这个工具用于 windows 机器和远端的 Linux 机器通过 XShell 传输文件. 安装完毕之后可以通过拖拽的方式将文件上传过去 1.查看软件包 通过 yum list 命令可以罗列出当前一共有哪些软件包. 由于包的数目可能非常之多, 这里我们需要使用 grep 命令只筛选出我们关注的包. 例如

    2024年01月21日
    浏览(35)
  • linux代码编辑器——vim

    一款编辑器,只负责写代码 当我们 使用 vim +文件名 进入文件中时, 发现一些按键 按了没有反应 这是因为vim是一个多模式的编辑器, 默认在命令模式下,按键都被当做命令了 1.命令模式转换到插入模式 1. a 输入a后,光标会向后移一位 2. i 使用i从命令模式转换到插入模式,

    2024年01月20日
    浏览(55)
  • Linux编辑器——Vim详解

    目录 ⭐前言 ⭐vim的基本概念 ⭐vim的基本操作 ⭐vim命令模式命令集  ⭐vim末行模式命令集 ⭐简单vim配置 ⭐配置文件的位置 ⭐常用配置选项 vi/vim的区别 简单点来说,它们都是多模式编辑器,不同的是vim是vi的升级版本,它不仅兼容vi的所有指令,而且还有一些新的特性在里面

    2024年02月21日
    浏览(39)
  • Linux编辑器 - vim使用

    Vim是一个广泛使用的文本编辑器,它是在Unix和Linux系统中常用的命令行文本编辑器之一。 vim的主要三种模式 ( 其实有好多模式,目前掌握这 3 种即可 ), 分别是 命令模式 ( command mode )、 插入模式 (Insert mode )和 底行模式 ( last line mode ),需要掌握每种模式的用法和差别

    2024年02月14日
    浏览(49)
  • 【Linux编辑器-vim使用】

    目前了解的vim有三种模式(其实有好多模式),分别是命令模式、插入模式和底行模式,各模式的功能区分如下: 命令模式(Normal mode) 控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入Insert mode下,或者到 last line mode 插入模式(Insert mode) 只有在Insert mode下

    2024年02月10日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包