您的位置:首页 > 娱乐 > 八卦 > vi/vim使用命令

vi/vim使用命令

2024/12/23 11:23:32 来源:https://blog.csdn.net/weixin_62799021/article/details/139667773  浏览:    关键词:vi/vim使用命令

你是否在编辑文件时以为键盘坏了,为什么不能删除呢,为什么不能敲代码呢,当你初识vi,会觉得这个东西设计很难用,这篇教程带你熟练得用上这款经典的工具,当你熟练了这款工具就会真正体会到高效率打码

Vi 是在 Unix 系统上广泛使用的编辑器,Vim 是 Vi 的改进版本,由 Bram Moolenaar 在 1991 年发布,Vim兼容vi命令,现在很多系统将vi符号链接到Vim,所以使用vi命令其实还是用的Vim
Vim官网

安装Vim

#centos
sudo yum update
sudo yum install vim#debian/ubuntu
sudo apt update
sudo apt install vim

直接输入vi a.txt可以打开文件,文件不存在则创建新文件,按下i进入插入模式,输入4*4的a矩阵,按下esc即可退出到普通模式

修改vim配置文件

#查看vim信息
vi --version

image.png

#编辑vim配置让你更方便学习
vi $HOME/.vimrc#语法高亮
syntax on
#tab占4个空格
set ts=4
#将tab转换为空格
set expandtab
#显示行号
set number
#实时计算其他行与当前行的距离
set relativenumber

vi/vim区分大小写,它设计的目的是让你用键盘解决问题,精通vim就可以丢掉鼠标了,你要剪视频的话还是捡回来吧,vim干不了这活

image.png

Vim入门

启动vim
命令解释
vim filename.txt编辑或新建filename.txt文件
vim -r filename.txt恢复异常退出的filename.txt文件,linux异常退出会创建.swp文件
vim -R filename.txt以只读方式打开filename.txt文件
vim + filename.txt打开文件并定位到最后一行
vim +2 filename.txt打开文件并定位第二行
vim +/hello filename.txt打开文件并定位第一个hello的位置

1、普通模式(NORMAL Mode)

当我们进入文件时处于普通模式,新建一个文件复制一篇英语作文,按下i,windterm再按Shist+Insert粘贴,练习一下就会了

普通模式才能移动光标,也就是刚进入文件的模式或者插入模式按下esc,结合以下的图例可以更好的理解图标的位置

image.png

文档移动光标
命令解释
K
J
H
L
%光标在括号上移动到对应的另一个括号
wword,向后跳到每个单词开头,括号也算一个单词
WShift+wWORD,字串,向后跳到下一个字串开头
eend,向后跳到每个单词末尾,括号也算一个单词
EShift+eEnd,向后跳到每句字串末尾
bback,回到上一个单词开头,括号也算一个单词
BShift+bBack,回到上一句字串的开头
-移动到非空格上一行
+移动到非空格下一行
gg移动到最顶部
GShift+g将光标移动到整个文档的最后
4G4 Shift+g将光标移动到整个文档的第4行
HCtrl+h光标移动到屏幕的最上方那一行的第一个字符
MCtrl+m光标移动到屏幕的最上方那一行的第一个字符
LCtrl+l光标移动到屏幕的最上方那一行的第一个字符
2k向上移动2行(未配置set relativenum)
4j向下移动4行(未配置set relativenum)
4Enter向下移动4行
2k移动到对应往上2行的行号,不用自己算多少行,实时显示其他行到当前行的距离(配置set relativenum)
4j移动到对应往下4行行号,不用自己算多少行,实时显示其他行到当前行的距离(配置set relativenum)
空格向后移动一位
n2空格number,跳到当前光标后指定2的位置,按下n,再输入数字,再按空格,,例如跳到当前光标后6位:n 6 空格
行内移动
命令解释
0Home数字0,移动到行首
$End移动到行尾
行内搜索
命令解释
f a移动到本行下一个匹配项,查找本行下一个a,;下一个匹配项,上一个匹配项
F aShift+f a移动到本行上一个匹配项,查找本行上一个a,;上一个匹配项,下一个匹配项
t a移动到本行下一个匹配项前,查找本行下一个a,;下一个匹配项,上一个匹配项
T aShift+t a移动到本行上一个匹配项后,查找本行上一个a,;上一个匹配项,下一个匹配项
复制&粘贴
命令解释
y0yank,复制当前行光标位置到行首的内容
y$yank,复制当前行光标位置到行尾的内容
y1Gyank,复制当前行到第一行的内容
yGyank,复制当前行到最后一行的内容
yyyank,复制当前行
10yyyank,复制当前行往下的10行内容
yw复制一个单词
p粘贴到光标下一行
PShift+p粘贴到光标上一行
4p粘贴4次
剪切
命令解释
x剪切当前光标所指的字符
4x剪切当前光标向后的4个字符
修改&替换
命令解释
>+Enter增加缩进
<+Enter减小缩进
=+Enter自动缩进
J将当前行与下一行合成同一行,删除回车
r*替换当前光标所选的字符,例如将当前光标所指替换为s:rs
RShift+rREPLACE,替换模式,按下R后,再输入字符替换当前光标所选的字符并将光标向后移动
删除
命令解释
dddelete,删除当前行
dl删除光标右边的字符
d3l删除光标右边的3个字符(包括光标下的字符,光标指向的是当前字符的前面)
dh删除光标左边的字符
d2h删除光标左边的2个字符
dw删除一个单词但不进入插入模式
Delete删除光标后一个字符
重复&撤销
命令解释
.英语句号,重复上一次修改操作,例如删除、替换、插入
uundo,撤销上一步操作
u2undo,撤销2步操作
UShift+uundo,撤销当前所有操作
Ctrl+rredo,重做上一步撤销动作,回退撤销
屏幕操作
命令解释
:split:spCtrl+w s上下分屏,Ctrl+w切换屏幕
:split set splitbelow上下分屏,下主屏,Ctrl+w切换屏幕
:split set nosplitbelow上下分屏,上主屏,Ctrl+w切换屏幕
:res +5调节上下分屏大小
:vsplit:vsCtrl+w v左右分屏,Ctrl+w切换屏幕
:vertical resize调节左右分屏大小
:e /home/a.txt在分屏的情况下打开文件编辑
Ctrl+w -调小屏幕
Ctrl+w =调大屏幕
Ctrl+fPage Down屏幕向下移动一页
Ctrl+bPage Up屏幕向上移动一页
Ctrl+d屏幕向下移动半页
Ctrl+u屏幕向上移动半页
Ctrl+e屏幕向下移动一行
Ctrl+y屏幕向上移动一行
20%移动到文档20%处
zz将当前行移动到屏幕中央
zttop,将当前行移动到屏幕顶端
zbbottom将当前行移动到屏幕底端

2、插入模式(Insert Mode)

普通模式按以下命令键进入插入模式(插前附后),有的远程连接工具会在左下角显示INSERT,也就是刚进入文件的模式到可以输入的模式

image.png

进入&退出插入模式
命令解释
i光标前插入字符,esc退出
aappend,光标后插入字符,esc退出
IShift+i行首插入字符,esc退出
AShift+a行尾插入字符,esc退出
oopen a new line,新建下一行
OShift+oopen a new line,新建上一行
gi定位上一次编辑的位置并进入插入模式
cw删除一个单词并进入插入模式
cc删除整行并进入插入模式
c删除光标至行尾的字符并进入插入模式
c1删除光标后1行并进入插入模式
ci+{ci+}ci+[ci+]ci+(ci+)change in,清除当前光标所在括号内的内容并切换到插入模式
citchange inner tag,删除tag内容并进入插入模式,例如修改

标签内的内容
ci"change inner ",删除"内的内容并进入插入模式
escCtrl+cCtrl+[退出插入模式普通模式
输入
命令解释
Ctrl+v 65以十进制输入,例如65是A
Ctrl+A插入上一次插入的内容
TabCtrl+i插入制表符
EntreCtrl+jCtrl+m换行
删除(进入插入模式后)
命令解释
BackSpaceCtrl+hCtrl+H删除光标前一个字符
Delete删除光标后的一个字符,你可以理解为光标实际指向的是当前字符的前面,插入模式普通模式都能用
Ctrl+w删除光标前一个单词
Ctrl+w撤销光标前输入的内容
修改
命令解释
Insert切换插入/替换模式

3、命令行模式(Command-Line Mode)

再按下esc退出插入模式普通模式,在普通模式输入:/进入命令行模式

image.png

保存&退出
命令解释
:set nu设置行号(未配置set relativenum
:set nonu取消行号(未配置set relativenum
:qquit,仅退出,文件没有编辑即可仅退出
:q!不保存退出
:wwrite,保存但不退出
:wq强制写入并退出,即使文件没有被修改
:x写入并退出,文件没有被修改,就没有任何操作
:e filename.txt关闭当前文件并创建filename.txt新文件,当前文件没保存会提示
:e! filename.txt放弃当前文件的修改并创建filename.txt新文件

|:r 文件名|将另一文件内容添加到当前光标后面|
|:w 文件名|另存为|
|ZZShift+z Shift+z|write&quit,保存退出|
|:saveas filename1.txt|另存为|

文件浏览器

在普通模式按下:进入命令行模式,是在打开一个文件的前提下打开文件浏览器

命令解释
:Explore:E:Shift+e垂直分隔一个窗口
:Sexplore:Sex水平分隔一个窗口打开文件浏览器
:Vexplore:Vex垂直分隔一个窗口打开文件浏览器
:Vex /home指定位置垂直分隔一个窗口
正则表达式
命令解释
:%s/$/hello/在当前行行尾追加hello
:%s/^M//g替换掉dos换行符,^M使用ctrl+v + Enter即可输入
搜索匹配
命令解释
:%s/old/new/g全局替换,例如全局替换hello为hello world::%s/hello/hello world/g
:%s/old/new/g全局替换,替换前提示每个是否确认替换(),例如全局替换hello为hello world::%s/hello/hello world/gc
/*向前搜索匹配并移动光标到对应位置,例如查找当前光标位置前的hello:/hello
?*向后搜索匹配并移动光标到对应位置,例如查找当前光标位置后的hello:?hello
n移动到下一个匹配项
NShift+n移动到上一个匹配项
escEnterctrl+cCtrl+[退出命令行模式
  • y:将当前匹配项替换为新的内容并继续执行下一个匹配项的替换
  • n:跳过当前匹配项,不进行替换,并继续执行下一个匹配项的替换
  • a:替换所有剩余的匹配项,不再提示每个匹配项
  • q:立即退出替换操作,不进行任何替换
  • l:将当前匹配项替换为新的内容并退出替换操作,不进行下一个匹配项的替换
  • ^E:向上滚动一行,显示上面的内容
  • ^Y:向下滚动一行,显示下面的内容

4、可视模式(VISUAL MODE)

在普通模式下按以下命令进入可视模式

命令解释
vvisual,可视模式,通过hjkl移动光标来选择单个字符,按d删除选中内容并回到普通模式
Ctrl+vvisual block,可视块模式,通过hjkl移动光标来选择字符块,按d删除选中内容并回到普通模式
Shift+vvisual line,可视行模式,通过hjkl移动光标来选择整行字符,按d删除选中内容并回到普通模式
viwvisual inner word,选中内部单词
viWvi Shift+wvisual inner WORD,选中字串包含后一个空格或标点
vawvisual around word,选中周围单词,包含前后空格
vaWva Shift+wvisual around WORD,选中字串包含后一个空格或标点
visvisual inner sentence,选中内部句子
vasva Shift+svisual around sentence,选中字串包含后一个空格或标点
vi]选中[]内的内容,不包含空格
vitvisual inner tag,选中html标签内的内容

在可视模式下按:normal 命令可以执行普通模式的命令,例如按下Shift+v进入可视行模式,j k选择行,输入:normal Ahello,在选中行后附加hello

Vim进阶

什么?用了这么多命令才进阶?其实这些命令没必要刻意去记,还有很多命令可以由你自己组合

Vim文本对象

  • 单词word是由字母、数字、下划线组成的,或者其他非空白字符序列组成,单词以空白字符(空格、tab、换行符)分隔
  • 字串WORD :由非空白字符序列组成,字串间以空白字符分隔
  • 句子sentence:一个句子以 .! 或者 ? 结尾并紧随着一个换行符、空格或者制表符。结束标点和空白字符之间可以出现任何数量的闭括号和引号: )]"。段落和小节的边界也视为句子的边界
  • 段落paragraph:段落是指一系列相邻的文本行。通常情况下,段落由空行或特定的标记行(例如注释行)分隔开,可以将段落视为一组相关的文本行,例如一个段落可以是一段描述、一组函数定义或一条记录
  • 小节section:文本中的一个部分或片段,小节可以通过标题行、特殊标记或其他可识别的特征来标识

Vim边界(一般用来选择括号内的内容)

  • i内部(inner):选中边界内部的内容,不包含边界
  • a环绕(around):选中边界内部的内容,包含边界

详见4、可视模式(VISUAL MODE)

Vim组合命令

vim命令由<operation><motion>组成,即<操作><动作>,例如以下命令,第一个d是操作选项,后面的则是动作;第一个y是操作选项,3l是动作

命令解释
dl删除光标右边的字符
d3l删除光标右边的3个字符(包括光标下的字符,光标指向的是当前字符的前面)
dh删除光标左边的字符
d2h删除光标左边的2个字符
y3l复制光标右边边的3个字符

Vim中的操作(operation)

命令操作
cchange,修改
ddelete,删除
yyank,复制
ppaste,粘贴
vvisual,可视模式
g~反转大小写
gu转换为小写
gU转换为大写
>增加缩进
<减小缩进
=自动缩进

Vim中的动作(motion)

命令动作
h/j/k/l向左、下、上、右移动光标
wword,移动到下一个单词的开头
eend,移动到当前单词的结尾
bbegin, 移动到当前单词的开头
0移动到当前行的开头
$移动到当前行的结尾
^移动到当前行的第一个非空字符
gg移动到文件的开头
G移动到文件的结尾
%匹配括号移动
(/)移动到句子的开头或者结尾
{/}移动到段落的开头或者结尾

再举几个简单的<operation><motion>例子

标题
ciw删除单词并修改
ci<删除<>内的单词并修改
di{删除<>内的单词
dt}删除当前光标到}前一个字符,t是行间搜索}一个字符
dT}删除当前光标到}后一个字符,T是行间搜索}个字符

Vim高级

普通模式下按q开始录制,再按一个字符或数字存储宏(0-9、a-Z),操作结束后按q结束录制,按@字符或数字使用宏

例如操作:q开始录制->e指定用e存储->i进入插入模式->hello输入hello->esc退出插入模式->q结束录制;再输入5@e,插入hello的操作就会在当前光标位置执行5次;输入@@可以执行最后一次录制的,当然你可以输入8@@,就会在当前光标位置执行8次最后录制的

进入此网站了解更多:https://tszv.vercel.app/pages/5c3d43/#%E4%BB%BB%E5%8A%A1%E7%82%B9

Vim高度可定制,前面已经修改过配置文件了,现在尝试其他配置,尽量在熟悉vim之后再修改键位

编辑配置文件

选择你需要的功能,很多效果远程连接是看不到的,只有在系统里操作能看到,注意区分普通用户和root用户,你在普通用户里配置了在root用户肯定是享受不到配置带来的优化
vi $HOME/.vimrc

普通模式下进入命令行模式输入:h option-list可以查看vim配置项,以下是一些常用配置,配置后进入命令行模式输入:source $Home/.vimrc重新加载配置或者重启vim生效

" 语法高亮
syntax on
" 高亮显示匹配的括号  
set showmatch  
"tab占4个空格
set ts=4
" 将tab转换为空格
set expandtab
" 显示行号
set number
" 实时计算其他行与当前行的距离
set relativenumber
" 命令补全
set wildmenu
" 搜索高亮
set hlsearch
" 搜索忽略大小写  
set ignorecase
" 总是显示状态行  
set laststatus=2
" 在编辑过程中,在右下角显示光标位置的状态行  
set ruler   
" 命令行(在状态行下)的高度,默认为1,这里是2  
set cmdheight=2 
" 修改按键映射,将原h改为n
"noremap n h
" 自定义组合映射,将S映射为:w+Enter,按下S即可保存
" map S :w<CR>
" 显示当前行下的线
" set cursorline
" 超过屏幕换行,折行
set wrap
" 在屏幕下方显示你输入的命令
set showcmd
" 设置编码
set enc=utf-8  
set fencs=utf-8,ucs-bom,shift-jis,gb18030,gbk,gb2312,cp936
" 语言设置  
set langmenu=zh_CN.UTF-8
set helplang=cn
" 侦测文件类型  
filetype on
" 载入文件类型插件  
filetype plugin on  
" 为特定文件类型载入相关缩进文件  
filetype indent on
" 打开状态栏标尺
set ruler
" 搜索时忽略大小写,但在有一个或以上大写字母时仍保持对大小写敏感
set ignorecase smartcase
" 输入搜索内容时就显示搜索结果
set incsearch
" 插入括号时,短暂地跳转到匹配的对应括号
"set showmatch
" 短暂跳转到匹配括号的时间
"set matchtime=2
" 开启新行时使用智能自动缩进
set smartindent

Vim添加插件

Vim插件需要插件管理器来统一管理,这里使用vim-plug,官网有其他系统的安装方式,这里介绍Linux

下载vim-plug

设置国内源可以看这篇:https://juejin.cn/post/7379641602619047975

#更新包和内核
sudo apt update
#安装curl
sudo apt install curl

在终端执行curl -fLo ~/.vim/autoload/plug.vim --create-dirs \ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim

编辑Vim配置

检查有没有~/.vim文件夹
cd ~然后ls -a
新建文件夹,分别为vim-plug下载的插件,自己安装的插件,文本相关插件,说明文档
mkdir -p ~/.vim/plugged ~/.vim/plugin ~/.vim/syntax ~/.vim/doc

image.png

vim $HOME/.vimrc在配置文件最后粘贴

call plug#begin('~/.vim/plugged')call plug#end()
安装插件

配置文件vim $HOME/.vimrc,添加插件,保存:w,插件网站:https://vimawesome.com/

实用插件:

" 开屏界面
Plug 'mhinz/vim-startify'
" 状态栏
Plug 'vim-airline/vim-airline'
" 主题
Plug 'vim-airline/vim-airline-themes'
" 代码缩进线
Plug 'yggdroot/indentline'
" 文件目录树
Plug 'scrooloose/nerdtree'
" 按下Ctrl+p模糊搜索
Plug 'kien/ctrlp.vim'
" 文件内快速定位
Plug 'easymotion/vim-easymotion'
" 成对编辑,例如快速加引号括号
Plug 'tpope/vim-surround'
" rust
Plug 'rust-lang/rust.vim'

image.png

#执行命令重新加载配置
:source $HOME/.vimrc
#查看插件状态
:PlugStatus
#执行下载插件
:PlugInstall
#退出下载界面
:q
#安装或更新插件
:PlugUpdate
#删除列表中不再存在的插件
:PlugClean

查看效果

#开屏插件,命令行执行
vim

image.png

NERDTree用法

编辑配置文件vim $HOME/.vimrc,添加以下内容,<leader>默认代表\<CR>代表Enter

nmap <leader>f :NERDTreeFind<CR>
nmap <leader>g :NERDTreeToggle<CR>
" 使用系统剪切版→Vim
set clipboard=unnamedplus
" Vim→系统剪切版
set clipboard=unnamed

image.png

命令行按下vim,再按下\g即打开或关闭NERDTree,按:vs水平分屏

命令解释
\g打开or关闭目录树
\f查找当前文件所在目录并显示目录树
Ctrl+w切换窗口
Ctrl+w+p切换当前窗口和目录树左边窗口
Ishift+i打开隐藏文件
ctrlp.vim用法

编辑配置文件vim $HOME/.vimrc,添加以下内容,g:ctrlp_map代表全局变量ctrlp_map,<c-p>代表Ctrl+p

let g:ctrlp_map = '<c-p>'

命令行输入vim,然后按下Ctrl+p即可模糊搜索,Enter打开匹配到的文件,\f显示文件位置并打开目录树

vim-easymotion用法

<leader>可以通过let mapleader=""设置为其他键位,这里使用默认\

命令解释
<leader><leader>w\\w搜索移动到光标后面的目标
<leader><leader>b搜索移动到光标前面的目标
<leader><leader>s全局搜索
<leader><leader>j行级向下搜索
<leader><leader>k行级向上搜索
vim-surround用法

如普通模式,ys iw ",给单词添加""

命令解释
dsdelete a surrounding, 删除环境里的内容
cschange a surrounding, 修改环境里的内容
ysyou add a surrounding,添加环境

Vim终极

当你熟悉vim之后,可以使用全新的Neovim,Neovim扩展了vim的功能,适配vim的配置文件和插件系统,Neovim使用异步处理,提高了响应速度,资源占用也比vim小

升级为NeoVim

官网其他系统安装方法

从vim迁移到neovim

如果你已经配置了很多vim插件不想继续麻烦,可以参照以下方案进行升级https://neovim.io/doc/user/nvim.html#nvim-from-vim
但我还是建议使用新的配置文件,某些vim中的配置在nvim中已经被删除,也可以将你的配置文件发给gpt让他生成lua语法的配置

卸载nvim

sudo apt remove neovim

安装nvim

这里使用通用的Linux安装方法,装最新的版本,直接install的是老版本
找一种你喜欢的字体:https://www.nerdfonts.com/font-downloads ,复制下载链接

image.png

#安装字体配置
apt install -yqq fontconfig
#下载字体
wget -q -nv https://github.com/ryanoasis/nerd-fonts/releases/download/v3.2.1/BitstreamVeraSansMono.zip
#解压
unzip BitstreamVeraSansMono.zip -d ~/.local/share/fonts
#删除压缩包
rm BitstreamVeraSansMono.zip
#加载字体
fc-cache -fv
#安装python3环境
apt install -yqq python3 python3-venv python3-pip
#配置python环境,3.11改成你自己下的版本,python3和python命令都会调用pthon3.11
update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.11 1
update-alternatives --install /usr/bin/python python /usr/bin/python3.11 1
#查看是否配置成功,显示你下版本就是成功了
python
#退出python
exit()
#添加nvm环境变量
export NVM_DIR=/root/.nvm
#安装nvm管理node环境
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
#添加shell配置
cat >> ~/.bashrc <<EOF
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion
EOF
#重新加载脚本
source ~/.bashrc
#下载node
nvm install 20
#检查node版本
node -v
#检查npm版本
npm -v
#安装Neovim,找到最新的对应版本下载https://github.com/neovim/neovim/releases
wget -q -nv https://github.com/neovim/neovim/releases/download/v0.10.0/nvim-linux64.tar.gz
#解压
tar zxf nvim-linux64.tar.gz
#移动到local下
mv nvim-linux64 /usr/local/share
#创建软连接
ln -s /usr/local/share/nvim-linux64/bin/nvim /usr/local/bin/nvim
#进入neovim
nvim

看到这个就装啦
image.png

安装Lazyvim

你是否反感频繁的去配置插件,使用lazyvim让你的Neovimp配置更方便,lazyvim提供了一套约定熟成的配置,当然你也可以添加配置自定义喜欢的配置,官网

备份nvim(如果你已经配置过nvim的话,我就不备份了)

mv ~/.config/nvim ~/.config/nvim.bak
mv ~/.local/share/nvim ~/.local/share/nvim.bak

克隆启动配置

git clone https://github.com/LazyVim/starter ~/.config/nvim
#删除.git
rm -rf ~/.config/nvim/.git

这个时候执行nvim打开nvim,不要动让他自己配置安装,等它不动了按q退出,看到这个东西就是lazyvim装好了

image.png
安装代码插件

按空格键->c键->m键->2键->`Ctrl+f`或者`/`搜索rust->jk上下选择->按下i安装->`esc`清除搜索

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com