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
#编辑vim配置让你更方便学习
vi $HOME/.vimrc#语法高亮
syntax on
#tab占4个空格
set ts=4
#将tab转换为空格
set expandtab
#显示行号
set number
#实时计算其他行与当前行的距离
set relativenumber
vi/vim区分大小写,它设计的目的是让你用键盘解决问题,精通vim就可以丢掉鼠标了,你要剪视频的话还是捡回来吧,vim干不了这活
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
,结合以下的图例可以更好的理解图标的位置
文档移动光标
命令 | 解释 |
---|---|
K | 上 |
J | 下 |
H | 左 |
L | 右 |
% | 光标在括号上移动到对应的另一个括号 |
w | word,向后跳到每个单词开头,括号也算一个单词 |
W 或Shift+w | WORD,字串,向后跳到下一个字串开头 |
e | end,向后跳到每个单词末尾,括号也算一个单词 |
E 或Shift+e | End,向后跳到每句字串末尾 |
b | back,回到上一个单词开头,括号也算一个单词 |
B 或Shift+b | Back,回到上一句字串的开头 |
- | 移动到非空格上一行 |
+ | 移动到非空格下一行 |
gg | 移动到最顶部 |
G 或Shift+g | 将光标移动到整个文档的最后 |
4G 或4 Shift+g | 将光标移动到整个文档的第4行 |
H 或Ctrl+h | 光标移动到屏幕的最上方那一行的第一个字符 |
M 或Ctrl+m | 光标移动到屏幕的最上方那一行的第一个字符 |
L 或Ctrl+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 空格 |
行内移动
命令 | 解释 |
---|---|
0 或Home | 数字0,移动到行首 |
$ 或End | 移动到行尾 |
行内搜索
命令 | 解释 |
---|---|
f a | 移动到本行下一个匹配项,查找本行下一个a,; 下一个匹配项, 上一个匹配项 |
F a 或Shift+f a | 移动到本行上一个匹配项,查找本行上一个a,; 上一个匹配项, 下一个匹配项 |
t a | 移动到本行下一个匹配项前,查找本行下一个a,; 下一个匹配项, 上一个匹配项 |
T a 或Shift+t a | 移动到本行上一个匹配项后,查找本行上一个a,; 上一个匹配项, 下一个匹配项 |
复制&粘贴
命令 | 解释 |
---|---|
y0 | yank,复制当前行光标位置到行首的内容 |
y$ | yank,复制当前行光标位置到行尾的内容 |
y1G | yank,复制当前行到第一行的内容 |
yG | yank,复制当前行到最后一行的内容 |
yy | yank,复制当前行 |
10yy | yank,复制当前行往下的10行内容 |
yw | 复制一个单词 |
p | 粘贴到光标下一行 |
P 或Shift+p | 粘贴到光标上一行 |
4p | 粘贴4次 |
剪切
命令 | 解释 |
---|---|
x | 剪切当前光标所指的字符 |
4x | 剪切当前光标向后的4个字符 |
修改&替换
命令 | 解释 |
---|---|
>+Enter | 增加缩进 |
<+Enter | 减小缩进 |
=+Enter | 自动缩进 |
J | 将当前行与下一行合成同一行,删除回车 |
r* | 替换当前光标所选的字符,例如将当前光标所指替换为s:rs |
R 或Shift+r | REPLACE,替换模式,按下R 后,再输入字符替换当前光标所选的字符并将光标向后移动 |
删除
命令 | 解释 |
---|---|
dd | delete,删除当前行 |
dl | 删除光标右边的字符 |
d3l | 删除光标右边的3个字符(包括光标下的字符,光标指向的是当前字符的前面) |
dh | 删除光标左边的字符 |
d2h | 删除光标左边的2个字符 |
dw | 删除一个单词但不进入插入模式 |
Delete | 删除光标后一个字符 |
重复&撤销
命令 | 解释 |
---|---|
. | 英语句号,重复上一次修改操作,例如删除、替换、插入 |
u | undo,撤销上一步操作 |
u2 | undo,撤销2步操作 |
U 或Shift+u | undo,撤销当前所有操作 |
Ctrl+r | redo,重做上一步撤销动作,回退撤销 |
屏幕操作
命令 | 解释 |
---|---|
:split 或:sp 或Ctrl+w s | 上下分屏,Ctrl+w 切换屏幕 |
:split set splitbelow | 上下分屏,下主屏,Ctrl+w 切换屏幕 |
:split set nosplitbelow | 上下分屏,上主屏,Ctrl+w 切换屏幕 |
:res +5 | 调节上下分屏大小 |
:vsplit 或:vs 或Ctrl+w v | 左右分屏,Ctrl+w 切换屏幕 |
:vertical resize | 调节左右分屏大小 |
:e /home/a.txt | 在分屏的情况下打开文件编辑 |
Ctrl+w - | 调小屏幕 |
Ctrl+w = | 调大屏幕 |
Ctrl+f 或Page Down | 屏幕向下移动一页 |
Ctrl+b 或Page Up | 屏幕向上移动一页 |
Ctrl+d | 屏幕向下移动半页 |
Ctrl+u | 屏幕向上移动半页 |
Ctrl+e | 屏幕向下移动一行 |
Ctrl+y | 屏幕向上移动一行 |
20% | 移动到文档20%处 |
zz | 将当前行移动到屏幕中央 |
zt | top,将当前行移动到屏幕顶端 |
zb | bottom将当前行移动到屏幕底端 |
2、插入模式(Insert Mode)
在普通模式按以下命令键进入插入模式(插前附后),有的远程连接工具会在左下角显示INSERT
,也就是刚进入文件的模式到可以输入的模式
进入&退出插入模式
命令 | 解释 |
---|---|
i | 光标前插入字符,esc 退出 |
a | append,光标后插入字符,esc 退出 |
I 或Shift+i | 行首插入字符,esc 退出 |
A 或Shift+a | 行尾插入字符,esc 退出 |
o | open a new line,新建下一行 |
O 或Shift+o | open a new line,新建上一行 |
gi | 定位上一次编辑的位置并进入插入模式 |
cw | 删除一个单词并进入插入模式 |
cc | 删除整行并进入插入模式 |
c | 删除光标至行尾的字符并进入插入模式 |
c1 | 删除光标后1行并进入插入模式 |
ci+{ 或ci+} 或ci+[ 或ci+] 或ci+( 或ci+) | change in,清除当前光标所在括号内的内容并切换到插入模式 |
cit | change inner tag,删除tag内容并进入插入模式,例如修改标签内的内容 |
ci" | change inner ",删除" 内的内容并进入插入模式 |
esc 或Ctrl+c 或Ctrl+[ | 退出插入模式到普通模式 |
输入
命令 | 解释 |
---|---|
Ctrl+v 65 | 以十进制输入,例如65是A |
Ctrl+A | 插入上一次插入的内容 |
Tab 或Ctrl+i | 插入制表符 |
Entre 或Ctrl+j 或Ctrl+m | 换行 |
删除(进入插入模式后)
命令 | 解释 |
---|---|
BackSpace 或Ctrl+h 或Ctrl+H | 删除光标前一个字符 |
Delete | 删除光标后的一个字符,你可以理解为光标实际指向的是当前字符的前面,插入模式和普通模式都能用 |
Ctrl+w | 删除光标前一个单词 |
Ctrl+w | 撤销光标前输入的内容 |
修改
命令 | 解释 |
---|---|
Insert | 切换插入/替换模式 |
3、命令行模式(Command-Line Mode)
再按下esc
退出插入模式到普通模式,在普通模式输入:
或/
进入命令行模式
保存&退出
命令 | 解释 |
---|---|
:set nu | 设置行号(未配置set relativenum ) |
:set nonu | 取消行号(未配置set relativenum ) |
:q | quit,仅退出,文件没有编辑即可仅退出 |
:q! | 不保存退出 |
:w | write,保存但不退出 |
:wq | 强制写入并退出,即使文件没有被修改 |
:x | 写入并退出,文件没有被修改,就没有任何操作 |
:e filename.txt | 关闭当前文件并创建filename.txt新文件,当前文件没保存会提示 |
:e! filename.txt | 放弃当前文件的修改并创建filename.txt新文件 |
|:r 文件名
|将另一文件内容添加到当前光标后面|
|:w 文件名
|另存为|
|ZZ
或Shift+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 | 移动到下一个匹配项 |
N 或Shift+n | 移动到上一个匹配项 |
esc 或Enter 或ctrl+c 或Ctrl+[ | 退出命令行模式 |
y
:将当前匹配项替换为新的内容并继续执行下一个匹配项的替换n
:跳过当前匹配项,不进行替换,并继续执行下一个匹配项的替换a
:替换所有剩余的匹配项,不再提示每个匹配项q
:立即退出替换操作,不进行任何替换l
:将当前匹配项替换为新的内容并退出替换操作,不进行下一个匹配项的替换^E
:向上滚动一行,显示上面的内容^Y
:向下滚动一行,显示下面的内容
4、可视模式(VISUAL MODE)
在普通模式下按以下命令进入可视模式
命令 | 解释 |
---|---|
v | visual,可视模式,通过hjkl移动光标来选择单个字符,按d 删除选中内容并回到普通模式 |
Ctrl+v | visual block,可视块模式,通过hjkl移动光标来选择字符块,按d 删除选中内容并回到普通模式 |
Shift+v | visual line,可视行模式,通过hjkl移动光标来选择整行字符,按d 删除选中内容并回到普通模式 |
viw | visual inner word,选中内部单词 |
viW 或vi Shift+w | visual inner WORD,选中字串包含后一个空格或标点 |
vaw | visual around word,选中周围单词,包含前后空格 |
vaW 或va Shift+w | visual around WORD,选中字串包含后一个空格或标点 |
vis | visual inner sentence,选中内部句子 |
vas 或va Shift+s | visual around sentence,选中字串包含后一个空格或标点 |
vi] | 选中[]内的内容,不包含空格 |
vit | visual 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)
命令 | 操作 |
---|---|
c | change,修改 |
d | delete,删除 |
y | yank,复制 |
p | paste,粘贴 |
v | visual,可视模式 |
g~ | 反转大小写 |
gu | 转换为小写 |
gU | 转换为大写 |
> | 增加缩进 |
< | 减小缩进 |
= | 自动缩进 |
Vim中的动作(motion)
命令 | 动作 |
---|---|
h/j/k/l | 向左、下、上、右移动光标 |
w | word,移动到下一个单词的开头 |
e | end,移动到当前单词的结尾 |
b | begin, 移动到当前单词的开头 |
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
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'
#执行命令重新加载配置
:source $HOME/.vimrc
#查看插件状态
:PlugStatus
#执行下载插件
:PlugInstall
#退出下载界面
:q
#安装或更新插件
:PlugUpdate
#删除列表中不再存在的插件
:PlugClean
查看效果
#开屏插件,命令行执行
vim
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
命令行按下vim
,再按下\g
即打开或关闭NERDTree,按:vs
水平分屏
命令 | 解释 |
---|---|
\g | 打开or关闭目录树 |
\f | 查找当前文件所在目录并显示目录树 |
Ctrl+w | 切换窗口 |
Ctrl+w+p | 切换当前窗口和目录树左边窗口 |
I 或shift+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 "
,给单词添加""
命令 | 解释 |
---|---|
ds | delete a surrounding, 删除环境里的内容 |
cs | change a surrounding, 修改环境里的内容 |
ys | you 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 ,复制下载链接
#安装字体配置
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
看到这个就装啦
安装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装好了
安装代码插件
按空格键->c键->m键->2键->`Ctrl+f`或者`/`搜索rust->jk上下选择->按下i安装->`esc`清除搜索
相关文章:

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

webpack打包gz文件,nginx开启gzip压缩
wepback配置 webpack4配合"compression-webpack-plugin": "^6.1.2"打包压缩gz chain.plugin("compression").use(new CompressionPlugin({test: /\.js$|\.html$|\.css$/,threshold: 10240, // 超过10KB的压缩deleteOriginalAssets: false,// 保…...

微服务开发与实战Day11 - 微服务面试篇
一、分布式事务 1. CAP定理 1998年,加州大学的计算机科学及Eric Brewer提出,分布式系统有三个指标: Consistency(一致性)Availability(可用性)Partition tolerance(分区容错性&am…...

基于Spring Boot+VUE职称评审管理系统
1管理员功能模块 管理员登录,通过填写注册时输入的用户名、密码、角色进行登录,如图1所示。 图1管理员登录界面图 管理员登录进入职称评审管理系统可以查看首页、个人中心、用户管理、评审员管理、省份管理、评审条件管理、职称申请管理、结果公布管理、…...

MySQL 基本语法讲解及示例(上)
第一节:MySQL的基本操作 1. 创建数据库 在 MySQL 中,创建数据库的步骤如下: 命令行操作 打开 MySQL 命令行客户端或连接到 MySQL 服务器。 输入以下命令创建一个数据库: CREATE DATABASE database_name;例如,创建一…...

6.18作业
完善对话框,点击登录对话框,如果账号和密码匹配,则弹出信息对话框,给出提示”登录成功“,提供一个Ok按钮,用户点击Ok后,关闭登录界面,跳转到其他界面 如果账号和密码不匹配ÿ…...

Excel文件转换为HTML文件
文章目录 前言安装python包python代码 前言 将一个Excel文件转换为HTML文件 安装python包 使用pandas和openpyxl库来实现这个功能 pip install pandas openpyxlpython代码 1、首先使用tkinter库中的filedialog模块弹出一个对话框来选择要转换的Excel文件 2、使用pandas库…...

MySQL数据库入门
1、MySQL概述 MySQL官方网站 https://www.mysql.com/downloads/ MySQL被Oracle公司收购了,作者又重新编写了一个开源的数据库管理系统,Mariadb 2、MySQL产品&版本 2、数据库在网站架构中的角色 LAMP LNMP网站架构 3、安装MySQL-基于yum 查…...

vue element-ui 下拉框 以及 input 限制输入,小数点后保留两位 界面设计案例 和 例子:支持mp4和m3u8视频播放
vue input 限制输入,小数点后保留两位 以及 图片垂直居中显示 和 分享 git 小技巧-CSDN博客文章浏览阅读430次,点赞5次,收藏4次。error:Your local changes to the following files would be overwritten by merge:_error: your local change…...

Python基础用法 之 运算符
1.算数运算符 符号作用说明举例加与“”相同 - 减与“-”相同*乘 与“ ”相同 9*218/除 与“ ”相同 9/24.5 、6/32.0//求商(整数部分) 两个数据做除法的 商 9//24%取余(余数部分) 是两个数据做除法的 余数 9%21**幂、次方2**…...

事务所管理系统的设计
管理员账户功能包括:系统首页,个人中心,管理员管理,客户管理,评论管理,基础数据管理,公告信息管理 客户账户功能包括:系统首页,个人中心,律师管理࿰…...

airsim安装
继续进行,遇到下面的报错 Cannot find path HKEY_CLASSES_ROOT\Unreal.ProjectFile\shell\rungenproj 在Git地址的issue中,搜到下面的解决方法,根因是安装Unreal Engine之后未重启电脑,文件未关联导致,或者出现重定向…...

打造精致UI界面:字体设计的妙招
字体设计是UI设计的关键模块之一。字体设计是否有效可能直接实现或破坏整个UI界面。那么,界面设计的字体设计有哪些规范呢?如何设计细节字体?本文将解释字体设计规范的可读性、可读性和可用性,并介绍UI界面中的字体设计技巧。 如…...

[BJDCTF2020]ZJCTF,不过如此1
打开题目可以看到一段php文件包含,源码如下 <?phperror_reporting(0); $text $_GET["text"]; $file $_GET["file"]; if(isset($text)&&(file_get_contents($text,r)"I have a dream")){echo "<br><h1>…...

全网最全 Kimi 使用手册,看完 Kimi 效率提升 80%
在当前AI文字大模型领域,ChatGPT4.0无疑是最强大。然而,最近最火爆的大模型非国产Kimi莫属。 相较于其它大模型,Kimi 最大的优势在于,超长文本输入,支持200万汉字,是全球范围内罕见的超长文本处理工具&…...

“Redis中的持久化:深入理解RDB与AOF机制“
目录 # 概念 1. RDB持久化 1.1 备份是如何执行的(RDB过程) 1.2 配置文件信息 1.3 RDB持久化操作 1.4 RDB优势 1.5 RDB劣势 1.6 RDB做备份 2. AOF持久化 2.1 AOF开启及使用 2.2 异常恢复 2.3 配置文件操作 2.4 AOF持久化流程 2.5 优点 2.6…...

PHP框架详解:Symfony框架讲解
PHP作为一种流行的服务器端编程语言,拥有众多框架,其中Symfony是备受开发者推崇的一个强大框架。本文将详细讲解Symfony框架的特点、优势及其主要组件和用法。 一、Symfony简介 Symfony是由Fabien Potencier于2005年创建的一个开源PHP框架。它基于MVC&…...

PR软件视频抠图换背景
1 新建项目 2 新建序列 在项目的右下角有个图标,新建 序列 序列是视频的制作尺寸,根据自己的需要选择 3 新建颜色遮罩 在项目的右下角--新建颜色遮罩--选择黑色--确定 4 导入视频 把要导入视频的文件夹打开,把视频拖到 项目 里 把黑色遮罩拖…...

下载依赖有问题(只有自己有问题)
有缓存! 删除node_modules 命令:npm run clean 前提是该项目支持这个命令:package.json > scripts 内有 clean 例如下面这个就没有clean,则直接手动删除 清除缓存 npm cache clean --force pnpm store prune删除lock文件 …...

vscode-关闭ts与js语义校验
1.ts与js语义校验 TypeScript(TS)和JavaScript(JS)在语义校验方面有很大的不同。TypeScript是一种静态类型检查的编程语言,它是JavaScript的一个超集,为JavaScript添加了类型系统和其他一些特性。而JavaScr…...

风控中的文本相似方法之余弦定理
一、余弦相似 一、 余弦相似概述 余弦相似性通过测量两个向量的夹角的余弦值来度量它们之间的相似性。0度角的余弦值是1,而其他任何角度的余弦值都不大于1;并且其最小值是-1。 从而两个向量之间的角度的余弦值确定两个向量是否大致指向相同的方向。结…...

Spring Boot定时任务编程指南:如何创建和配置周期性任务
🍁 作者:知识浅谈,CSDN签约讲师,CSDN博客专家,华为云云享专家,阿里云专家博主 📌 擅长领域:全栈工程师、爬虫、ACM算法 🔥 微信:zsqtcyw 联系我领取学习资料 …...

Java 获取客户端 IP 地址【工具类】
Java 获取客户端 IP 地址 import javax.servlet.http.HttpServletRequest; import java.net.InetAddress;/*** 网络工具类*/ public class NetUtils {/*** 获取客户端 IP 地址** param request 请求* return {link String}*/public static String getIpAddress(HttpServletReq…...

区块链中nonce是什么,什么作用
目录 区块链中nonce是什么,什么作用 区块链中nonce是什么,什么作用 Nonce在以太坊中是一个用于确保交易顺序性和唯一性的重要参数。以下是对Nonce的详细解释: 定义 Nonce是一个scalar值,它等于从该地址发送的交易数量,或在具有关联代码的账户的情况下,由该账户创建的合…...

探索Python的多媒体解决方案:ffmpy库
文章目录 探索Python的多媒体解决方案:ffmpy库一、背景:数字化时代的多媒体处理二、ffmpy:Python与ffmpeg的桥梁三、安装ffmpy:轻松几步四、ffmpy的五项基本功能1. 转换视频格式2. 调整视频质量3. 音频转换4. 视频截图5. 视频合并…...

dmhs同步因目的端表自增列报错解决方法
dmhs同步因目的端表自增列报错解决方法 1 dmhs copy 装载数据时报错 HY000 CODE:-27232 配置源端捕获器cpt 1 dmhs copy 装载数据时报错 HY000 CODE:-2723 ERR:Only if specified in the column list and SET IDENTITY INSERT is ON, then identity column could be assigned …...

封装分发安装教程
【安装环境】 Linux伪静态 PHP7.1mysql5.6 SSL 证书 (使用宝塔) 1、在宝塔上面新建站点,把压缩包上传到根目录,解压出来,然后导入 sql 数据库文件,再 然后修改数据库配置 source\system\db_config.php 2、…...

redis从入门到进阶——数据类型、 操作、数值操作、发布订阅、消息队列、布隆过滤器、事务
文章目录 基础数据类型操作数值操作 进阶发布订阅消息队列布隆过滤器事务 基础 数据类型 string,set, hash, list, zset 操作 string符串类型: 保存一个字符串:set key value [EX seconds|PX milliseconds...] [NX|XX]EX:设置…...

剖析 Kafka 消息丢失的原因
文章目录 前言一、生产者导致的消息丢失的场景场景1:消息太大解决方案 :1、减少生产者发送消息体体积2、调整参数max.request.size 场景2:异步发送机制解决方案 :1、使用带回调函数的发送方法 场景3:网络问题和配置不当…...

阿里又出AI神器,颠覆传统图像编辑,免费开源!
文章首发于公众号:X小鹿AI副业 大家好,我是程序员X小鹿,前互联网大厂程序员,自由职业2年,也一名 AIGC 爱好者,持续分享更多前沿的「AI 工具」和「AI副业玩法」,欢迎一起交流~ 最近阿里开源了 Mi…...