转存-Vim配置
以后可能有用(
转自 大佬的博客
Vim 是 Vi IMproved 的首字母缩写。它是由 Bram Moolenaar 编写的免费开源文本编辑器。 它于 1991 年首次针对 UNIX 类系统发布,其主要目标是为 Vi 编辑器提供增强功能。 Vim 被认为是克隆 Vi 编辑器。 像 Vi 一样,它也是以命令为中心的编辑器。学习 Vim 的一个优点是 - 它随处可用。 采用任何 UNIX 类系统,如 Linux,Mac,HP-UX,AIX 等等,默认情况下Vim是安装在系统中的。 ——来源
当然,NOI 竞赛也是可以用的。
本文仅针对 Linux 操作系统!!!
注:本文所有的操作实在基于 Windows 的 Linux 发行版上进行的。
目录
-
安装 Vim
-
Vim 的基本操作
-
Vim 进入插入模式的方式
-
Vim 命令模式基本操作
-
Vim 普通模式基本快捷键
-
Vim 的基本配置
安装 Vim
- 使用
yum
下载 Vim:
yum install vim
- 使用
apt-get
下载 Vim:
sudo apt-get update
sudo apt-get install vim
接下来就可以用 which
命令查找了
Vim 的基本操作
模式
Vim 有两种模式:
-
正常模式 (Normal-mode)
-
插入模式 (Insert-mode)
-
命令模式 (Command-mode)
-
可视模式 (Visual-mode)
在此我们仅讨论前三种模式
正常模式 (Normal-mode)
正常模式一般用于浏览文件,也包括一些复制、粘贴、删除等操作。这时击键时,一些组合键就是 vim 的功能键,而不会在文本中键入对应的字符。
正常模式也是一开始进入 Vim 时默认的模式。
或者可以通过敲下 Esc
键切换至该模式
插入模式 (Insert-mode)
插入模式顾名思义,就是编辑的模式,可以通过摁下一些特定字母进入,后文会详
细介绍。
命令模式
在正常模式中,按下 :
(冒号)键或者 /
(斜杠),会进入命令模式。
在命令模式中可以执行一些输入并执行一些 Vim 或插件提供的指令,就像在命令行里一样。
使用 Vim 打开文件
打开单个文件
假设你要打开的文件名为 AKIOI.cpp
;
那么只需在命令行嵌入 vim AKIOI.cpp
即可。
打开多个文件
假设你要打开两个文件,名字分别为 AKNOI.cpp
和 AKIOI.cpp
那么只需要在命令行嵌入 vim AKNOI.cpp AKIOI.cpp
即可
打开多个文件后默认 Vim 是停留在第一个文件(即用例中的 AKNOI.cpp
),那么如何切换至其他的文件呢?
首先我们需要进入命令模式,在嵌入命令 ls
查看我们现在打开的文件,如图
我们可以嵌入 b1
来切换至第一个文件,同理嵌入 b2
切换至第二个文件。
特别的,可以嵌入 bn
切换至下一个文件 , bp
切换至上一个文件。
但是,这样的效率比较慢,隔壁家 VsCode 可以分屏打开多个文件,咱 Vim 也行。
老规矩,假设要打开的文件是 AKNOI.cpp
和 AKIOI.cpp
。
那么左右分屏打开这两个文件只需在命令行嵌入 vim -On AKNOI.cpp AKIOI.cpp
即可。
上下分屏打开这两个文件只需在命令行嵌入 vim -on AKNOI.cpp AKIOI.cpp
即可。
假设一个名为 AKIOI.cpp
的文件非常的长,但是你想上下对比着看这个文件,但不想翻页,那么只需在打开文件进入命令模式敲下 sp AKIOI.cpp
进行上下分屏(当然,接上其他的文件会向下分屏打开其他的文件)。
同理,嵌入 vsp AKIOI.cpp
进行左右分屏
分屏后,点击即可进入相应的文件(如果您为了装逼还可以查询 Ctrl + w
系列快捷键)。
弱弱的提一句,关闭分屏只需摁下 Ctrl + w + c
。
Vim 进入插入模式的方式
注意:Vim 命令区分大小写!!!
-
i
或者Insert
, 表示从光标所在位置开始插入字符(最常用); -
I
,表示从光标所在行开头开始插入字符(相当于i
+Home
); -
a
, 表示从光标所在位置后一个开始插入字符(相当于i
+ ); -
A
, 表示从光标所在行行尾插入字符(相当于i
+End
); -
o
, 表示从光标所在行下一行行首开始插入字符(相当于i
+End
+Enter
); -
O
, 表示从光标所在行上一行行首开始插入字符(相当于 +i
+End
+ 'Enter'); -
s
, 表示删除光标所在处的字符然后插入字符(相当于i
+Delete
); -
S
, 表示删除光标所在行然后插入字符(相当于dd
+i
)。
综上,只用学会 i
就好了
插入模式的使用和记事本基本没有区别。
Vim 命令模式基本操作
基本命令
-
w
, 表示保存文件(有时会提示需要强制保存,即为w!
); -
q
, 表示退出文件(有时会提示需要强制退出,即为q!
); -
wq
, 表示保存并退出(有时会提示需要强制保存并退出,即为wq!
); -
w file
, 表示保存并写入file
; -
qa
, 表示退出所有文件都不保存(有时会提示需要强制退出,即为qa!
); -
e file
, 表示打开file
; -
e!
, 表示放弃对文件的所有修改,恢复文件到上次保存的位置; -
saveas IOI.cpp
, 表示另存为IOI.cpp
; -
Sex
, 表示水平分割一个窗口,浏览文件系统; -
Vex
, 表示垂直分割一个窗口,浏览文件系统。
保存并退出还可以在普通模式下快速嵌入 ZZ
。
进阶命令
set nu
, 表示开启显示行号;
-
set nonu
, 表示关闭显示行号; -
set shiftwidth=n
(n
为具体数字),表示将自动缩进设为n
(但不会改变tab
的宽度);
-
n
(n
为具体数字) , 表示将光标移至第n
行的缩进后(自认为很鸡肋的一个命令); -
/字符串
, 表示在文件中查找该字符串(区分大小写),匹配到后按下n
查找下一个 , 按下N
查找上一个(从光标开始查找);
该命令比较特殊,在普通模式下直接输入即可,不用输入 :
ce
, 表示将光标所在行文本居中;
-
ri
, 表示将光标所在行文本居右; -
le
, 表示将光标所在行文本居左; -
set ic
, 关闭区分大小写(关闭后查找lxl
和查找LXL
是一样的);
-
set noic
, 打开区分大小写; -
s/lxl/noip
, 表示将当前行第一个lxl
替换为noip
;
s/lxl/noip/g
, 表示将当前行所有的lxl
替换为noip
;
第 11
和 第 12
的命令还有一个用法,就是在命令开头加上数字表示对指定行操作,或者加上 dollor符 表示最后一行,或者两个用逗号隔开的数字表示区间。
将 520
行到 1314
行的 lxl
替换为 noip
: 520,1314s/lxl/noip
将 最后一行的 lxl
替换为 noip
: dollor符 s/lxl/noip
将 第 1
行的 lxl
替换为 noip
: 1s/lxl/noip
%s/lxl/noip
, 表示将所有的lxl
替换为noip
;
11~13
的命令:当然,被替换的字符穿可以用正则表达式。
!Commond
(其中 Commond 是 Linux 命令) , 表示执行 Linux 命令
如执行 !ping www.luogu.com.cn
r !Commond
(其中 Commond 是 Linux 命令) , 表示执行命令,并且添加结果至操作文本光标处;
示例: r !echo I Love LXL FOREVER
map <key> <operation>
, 表示设置快捷键key
为操作operation
;
示例:设置 Ctrl + x
为显示行号,命令为:
map ^x <ESC>:set nu<ESC>
其中 ^x
的嵌入方式就是摁下 Ctrl + x
,<ESC>
就是代表 ESC
ab noip lxl
, 表示将以后输入的noip
自动替换为lxl
;
以上就是基本操作所需知道的命令啦!
Vim 普通模式基本快捷键
移动
-
h
表示向左移动光标; -
l
表示相当于向右移动光标 -
j
表示向下移动光标; -
k
表示向上移动光标。
1 ~ 4 用好了可以代替
-
0
表示移动到当前行行头,相当于Home
键; -
^
表示移动到当前行第一个非blank
的字符; -
表示移动到当前行行尾,相当与
End
键(忽视 dollar 符后的反斜杠); -
g_
表示移动到当前行最后一个非blank
的字符; -
w
表示移动到本行下一个单词开头; -
e
表示移动到本行下一个单词结尾; -
B
表示移动到本行上一个单词开头; -
fa
表示移动到本行下一个a
字符处; -
nfa
( 是自然数) 表示移动至光标后第 个a
字符处; -
nG
表示移动至第 行的行首; -
H
表示移动至当前显示的文档第一行行首; -
M
表示移动至当前显示的文档中间行行首; -
H
表示移动至当前显示的文档最后一行行首; -
gg
表示移动到第一行行首; -
G
表示移动到最后一行行首; -
zt
表示将当前行移动至当前显示的文档第一行; -
zz
表示将当前行移动至当前显示的文档中间行; -
zb
表示将当前行移动至当前显示的文档最后一行; -
Ctrl + d
表示向下翻半页; -
Ctrl + u
表示向上翻半页; -
Ctrl + f
表示向上翻整页; -
Ctrl + b
表示向下翻整页;
复制、删除
-
x
表示删除光标后的字符; -
X
表示删除光标前的字符; -
dd
表示删除光标所在行; -
ndd
(n
是自然数) 表示删除光标所在行(包括)下的n
行 -
d1G
表示删除光标所在行到第一行; -
dG
表示删除光标所在行到最后一行; -
d 表示删除光标所在字符到光标所在行最后一个字符(同上,不用管美元符号);
-
d0
表示删除光标所在字符到光标所在行第一个字符; -
yy
复制光标所在行; -
nyy
(n
是自然数) 表示复制光标所在行(包括)下的n
行 -
y1G
表示复制光标所在行到第一行; -
yG
表示复制光标所在行到最后一行; -
y 表示复制光标所在字符到光标所在行最后一个字符(同上,不用管美元符号);
-
y0
表示复制光标所在字符到光标所在行第一个字符; -
u
表示撤销上一个操作; -
Ctrl + r
表示反撤销 -
p
表示粘贴内容,如果复制内容是整行,则从下一行开始粘贴。如果复制的是一部分内容,则从光标的下一个字符开始粘贴; -
P
表示粘贴内容,如果复制内容是整行,则从上一行开始粘贴。如果复制的是一部分内容,则从光标所在位置开始粘贴。
Vim 的基本配置
配置文件
配置文件分为两种,一种是系统配置文件,存放于 /usr/share/vim/vimrc
, 另一种是用户配置文件,存放于用户主目录 ~/.vimrc
中。
没有可以自行新建。
注意:用户配置文件高于系统配置文件!
基本方法
先打开配置文件,然后开始配置。
-
突出显示当前行:
set cul
; -
突出显示当前列:
set cuc
; -
显示行号:
set nu
; -
显示括号匹配:
set showmatch
; -
设置 tab 长度为 个空格:
set tabstop=4
; -
设置自动缩进长度为 个空格:
set shiftwidth=4
; -
继承上一行的缩进方式:
set autoindent
; -
显示光标所在位置:
set ruler
; -
设置中文编码:
set fileencodings=utf-8,ucs-bom,gb18030,gbk,gb2312,cp936
set termencoding=utf-8
set encoding=utf-8
-
开启语法高亮:
syntax on
-
开启文件类型检测:
filetype plugin indent on
其实还有很多配置,可以自己去查资料了解。
最后奉上蒟蒻的配置:(蒟蒻配置了 F5 一键运行)
set nu
set tabstop=4
set showmatch
set cul
set shiftwidth=4
syntax on
set ruler
filetype plugin indent on
set fileencodings=utf-8,ucs-bom,gb18030,gbk,gb2312,cp936
set termencoding=utf-8
set encoding=utf-8
set autoindent
map <F5> :call CompileRunGcc()<CR>
func! CompileRunGcc()
exec "w"
if &filetype == 'c'
exec '!g++ % -o %.exe'
exec '!time ./%.exe'
elseif &filetype == 'cpp'
exec '!g++ % -o %.exe -sdt=c++14 -O2'
exec '!time ./%.exe'
elseif &filetype == 'python'
exec '!time python %'
elseif &filetype == 'sh'
:!time bash %
endif
endfunc
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现