编辑器
约 4463 字大约 15 分钟
2025-04-11
1.Vim 基础使用
安装:在
Centos 7
环境下安装vim
可以使用sudo yum install vim
,其他的环境可能不太一样。编辑:
vim
文件名”创建文件并且点击i
进行编辑,若是没有目标文件则创建,有则进入vim
的编辑状态。退出:
esc+:+wq
这里w
是保存,q
是退出(加!
是强制执行),连用就是保存文件并且退出 vim。
2.Vim 普通模式(Normal Mode)
vim
一进入就是普通模式(默认),按 i
进入插入模式,按 :
进入底行模式(实际上 vim
还有其他模式)。
2.1.复制粘贴命令
单行复制:
yy
命令可以复制整行文本,然后使用p
命令即可多行复制:
数字m+yy
命令可以复制光标所在行后m
行的文本,然后使用p
命令即可单字符复制:
vy
命令只复制光标所在位置的字符,然后使用p
命令即可多字符复制:
数字m vy
命令复制光标所在位置后m
个字符,然后使用p
命令即可
2.2.剪切粘贴命令
单行剪切:
dd
命令可以剪切整行文本,然后使用p
命令即可多行剪切:
数字m+dd
命令可以剪切光标所在行后m
行的文本,然后使用p
命令即可单字符剪切:
x
命令只剪切光标所在位置的字符,然后使用p
命令即可(这个键位可以替代删除操作)如果使用大写就可以向前剪切(代替delete
键)。多字符剪切:
数字m x
命令剪切光标所在位置后m
个的字符,然后使用p
命令即可
2.3.文本粘贴命令
粘贴命令是 p
但是,除了粘贴一次,还可以使用 数字m + p
粘贴 m
次
2.4.撤销回退命令
撤销操作:
u
命令是“撤销”命令回退操作:
[ctrl+r]
是撤销掉撤销命令,即“回退”命令
2.5.光标移动命令
文档体首尾:
gg
直达文本的第一个字符,G
直达文本的最后一个字符文本行首位:
^
可以定位到文本行的开头,$
可以定位到文本行的末尾行定位:
数字n+G
可以定位到第 n 行。单词首尾:
w
和b
可以一个单词为单位左右移动(w
和b
都是单词开头,e
是单词结尾)h、j、k、l
对应方向键(也可以使用方向键,不过更推荐前者,更加原生态,并且一定适用在很多场景,有些操作使用单独分离出来的方向键可能会失败。)。
补充:其实可以选择打开文件的时候就跳转到某一行,例如:
vim main.cpp +7
打开的时候光标就会定位到第7
行。
2.6.大小书写命令
~
将光标所在字符大写转小写,小写转大写,使用后会自动向右挪动光标(我们可以自己挪动光标,选择要转化的字符)。
2.7.替换文本命令
选择替换:
R
命令用作替换文本,接下来输入的内容会把光标所在文本替换/覆盖,光标可以被外我们随意挪动(作用类似insert
键,实际上这就是打开了替换模式,这个模式用完后也需要使用esc
退出)重复替换:
r
命令只替换一个字符(也可以加上数字m
,m r
再输入单个字符可以连续替换成相同的字符)
3.Vim 插入模式(Insert Mode)
使用 i
进入 vim
的插入模式就可以编写文本,按 [esc]
又回到命令模式。
补充:
i
是在当前光标位置插入字符
a
是在当前光标的下一个位置插入字符
o
是在当前光标的下一空行位置插入字符
:s 表示substitute,也就是替换, 格式为以下
:[range]s[ubstitute]/{pattern}/{string}/[flags] [count]
range 表示区间 % 用于表示全文, 2,3 表示从第2行开始到第3行
{pattern} 表示字符串匹配规则,要匹配什么样的字符串 , 比如^a 表示以a字符起始的字符串
{string} 表示要将匹配到的字符串替换为的新的string字符串
[flags] s_flags中,g比较常用,通常使用g表示全部替换,默认如果不给的话,表示只替换一次
[count] 表示在一行中匹配多少次,很少会用到....
如果想要将文件中所有 nihao 替换为 hello 则命令为: %s/nihao/hello/g
:p 用于打印指定区间的行
:[range]p[rint] [flags]
:i 在指定行上方添加文本
:{range}i[nsert][!]
4.Vim 底行模式(Command Line Mode)
使用 :
起头输入对于的命令,按 esc
回到命令模式。
4.1.保存文件
:wq
这里不再进行说明,前面有提及。
4.2.打开行号
:set nu
指令调出行号set nonu
取消行号。
4.3.分屏操作
打开分屏:
:vsplit 文件名
指令为多屏操作(或者使用:vs
)切换分屏:
[ctrl+ww]
可以快速切换分屏,[ctrl+w+方向键]
也可以达到切屏的效果取消分屏:
:only
取消所有分屏(只保留当前窗口),[ctrl+w+c]
取消单个分屏(或者使用:close
)分割分屏:
:split
是水平分割屏幕,:vsplit
是竖直分割屏幕。
补充:不过我个人不喜欢使用这个,更加喜欢使用
tmux(终端复用器)
,其分屏操作更加灵活。
4.4.编译代码
编译代码:
:!gcc 文件名
可在vim
内编译代码,然后继续使用vim
运行代码:
:!./a.out
可以输出代码运行结果,然后继续使用vim
注意:这里的
!
命令是不退出vim
并且执行后续对应的指令,可以用这个命令来运行命令行指令,和前面的强制执行不同。
4.5.查找内容
使用
:/关键字
来从上往下查找关键字,按n
继续查找下一个。使用
:?关键字
来从下往上查找关键字,按n
继续查找上一个。使用
#
可以查找和光标当前所处的相同关键字,并且对该关键字进行高亮,按n
逆向查找
5.Vim 替换模式(Replace Mode)
就是之前提到的 R
。
6.Vim 视图模式(Visual Mode)
[ctrl+v]
就会切换到视图模式,然后使用 [h/j/k/l]
来移动光标位置(注意不要使用方向键),输入 I
和 //
,然后输入 [esc]
即可注释,利用这个视图模式可以达到快速注释的目的(注意光标是前闭后开的)。
去除注释在使用 [ctrl+v]
然后选中注释的区域,输入 d
即可删除。
7.Vim 其他模式
另外,如果想要查看自己 Vim
的其他模式,可以在底行模式使用 :help vim-modes
我的这里有 7
种基本模式,不同 Vim
版本可能不太一样,剩下的模式您可以去研究一下...
8.Vim 相关配置
8.1.手动配置
Vim
的配置分为两种情况:
vim
配置选项可在vim
命令行模式下使用:set 某配置选项
激活配置选项(暂时有效)也可以通过
set 某配置选项
的格式保在配置文件中被vim
加载执行(长期有效)
在使用 vim
的时候最好是配置好配置文件,而 vim
的配置文件一般所在地为:家目录 ~
下的 .vimrc
文件,如果没有可以自己创建。
接下来进行配置,如果之前已经有相关配置了,可以像拷贝一份原有配置,避免配置失败。
vim
的配置文件 (例如 ~/.vimrc
) 其实是多个配置选项的集合。每个 vim
配置项都有对应的关闭选项:
set 某配置选项 #即可打开配置选项
set no某配置选项 #即可关闭配置选项
例如:set nu
表示显示行号,而 set nonu
则表示不显示行号。
知道这一配置思想后,相关的配置项有很多,您可以上网搜一下,配置个性化的 vim
。下面是我的 vim
配置,您可以拷贝进您的 .vimrc
文件中:
"""""""""""""""""""""""""""""""""""
"""=>全局配置<="""
"""""""""""""""""""""""""""""""""""
"关闭vi兼容模式"
set nocompatible
"设置历史记录步数"
set history=1000
"开启相关插件"
"侦测文件类型"
filetype on
"载入文件类型插件"
filetype plugin on
"为特定文件类型载入相关缩进文件"
filetype indent on
"当文件在外部被修改时,自动更新该文件"
set autoread
"激活鼠标的使用"
set mouse=a
set selection=exclusive
set selectmode=mouse,key
"保存全局变量"
set viminfo+=!
"带有如下符号的单词不要被换行分割"
set iskeyword+=_,$,@,%,#,-
"通过使用: commands命令,告诉我们文件的哪一行被改变过"
set report=0
"被分割的窗口间显示空白,便于阅读"
set fillchars=vert:\ ,stl:\ ,stlnc:\
"""""""""""""""""""""""""""""""""
"""=>字体和颜色<="""
"""""""""""""""""""""""""""""""""
"自动开启语法高亮"
syntax enable
"设置字体"
"set guifont=dejaVu\ Sans\ MONO\ 10
set guifont=Courier_New:h10:cANSI
"设置颜色"
"colorscheme desert
"高亮显示当前行"
set cursorline
hi cursorline guibg=#00ff00
hi CursorColumn guibg=#00ff00
"高亮显示普通txt文件(需要txt.vim脚本)"
au BufRead,BufNewFile * setfiletype txt
"""""""""""""""""""""""""""""""
"""=>代码折叠功能<="""
"""""""""""""""""""""""""""""""
"激活折叠功能"
set foldenable
"set nofen(这个是关闭折叠功能)"
"设置按照语法方式折叠(可简写set fdm=XX)"
"有6种折叠方法:
"manual 手工定义折叠"
"indent 更多的缩进表示更高级别的折叠"
"expr 用表达式来定义折叠"
"syntax 用语法高亮来定义折叠"
"diff 对没有更改的文本进行折叠"
"marker 对文中的标志进行折叠"
set foldmethod=manual
"set fdl=0(这个是不选用任何折叠方法)"
"设置折叠区域的宽度"
"如果不为0,则在屏幕左侧显示一个折叠标识列
"分别用“-”和“+”来表示打开和关闭的折叠
set foldcolumn=0
"设置折叠层数为3"
setlocal foldlevel=3
"设置为自动关闭折叠"
set foldclose=all
"用空格键来代替zo和zc快捷键实现开关折叠"
"zo O-pen a fold (打开折叠)
"zc C-lose a fold (关闭折叠)
"zf F-old creation (创建折叠)
"nnoremap <space> @=((foldclosed(line('.')) < 0) ? 'zc' : 'zo')<CR>
"""""""""""""""""""""""""""""""""""
"""=>文字处理<="""
"""""""""""""""""""""""""""""""""""
"使用空格来替换Tab"
set expandtab
"设置所有的Tab和缩进为4个空格"
set tabstop=4
"设定<<和>>命令移动时的宽度为4"
set shiftwidth=4
"使得按退格键时可以一次删除4个空格"
set softtabstop=4
set smarttab
"缩进,自动缩进(继承前一行的缩进)"
"set autoindent 命令打开自动缩进,是下面配置的缩写
"可使用autoindent命令的简写,即“:set ai”和“:set noai”
"还可以使用“:set ai sw=4”在一个命令中打开缩进并设置缩进级别
set ai
set cindent
"智能缩进"
set si
"自动换行”
set wrap
"设置软宽度"
set sw=4
"行内替换"
set gdefault
""""""""""""""""""""""""""""""""""
"""=>Vim 界面<="""
""""""""""""""""""""""""""""""""""
"增强模式中的命令行自动完成操作"
set wildmenu
"显示标尺"
set ruler
"设置命令行的高度"
set cmdheight=1
"显示行数"
set nu
"不要图形按钮"
set go=
"在执行宏命令时,不进行显示重绘;在宏命令执行完成后,一次性重绘,以便提高性能"
set lz
"使回格键(backspace)正常处理indent, eol, start等"
set backspace=eol,start,indent
"允许空格键和光标键跨越行边界"
set whichwrap+=<,>,h,l
"设置魔术"
set magic
"关闭遇到错误时的声音提示"
"关闭错误信息响铃"
set noerrorbells
"关闭使用可视响铃代替呼叫"
set novisualbell
"高亮显示匹配的括号([{和}])"
set showmatch
"匹配括号高亮的时间(单位是十分之一秒)"
set mat=2
"光标移动到buffer的顶部和底部时保持3行距离"
set scrolloff=3
"搜索逐字符高亮"
set hlsearch
set incsearch
"搜索时不区分大小写"
"还可以使用简写(“:set ic”和“:set noic”)"
set ignorecase
"用浅色高亮显示当前行"
autocmd InsertLeave * se nocul
autocmd InsertEnter * se cul
"输入的命令显示出来,看的清楚"
set showcmd
""""""""""""""""""""""""""""""""""""
"""=>编码设置<="""
""""""""""""""""""""""""""""""""""""
"设置编码"
set encoding=utf-8
set fencs=utf-8,ucs-bom,shift-jis,gb18030,gbk,gb2312,cp936
"设置文件编码"
set fileencodings=utf-8
"设置终端编码"
set termencoding=utf-8
"设置语言编码"
set langmenu=zh_CN.UTF-8
set helplang=cn
"""""""""""""""""""""""""""""
"""=>其他设置<="""
"""""""""""""""""""""""""""""
"开启新行时使用智能自动缩进"
set smartindent
set cin
set showmatch
"在处理未保存或只读文件的时候,弹出确认"
set confirm
"隐藏工具栏"
set guioptions-=T
"隐藏菜单栏"
set guioptions-=m
"置空错误铃声的终端代码"
set vb t_vb=
"显示状态栏(默认值为1,表示无法显示状态栏)"
set laststatus=2
"状态行显示的内容"
set statusline=%F%m%r%h%w\ [FORMAT=%{&ff}]\ [TYPE=%Y]\ [POS=%l,%v][%p%%]\ %{strftime(\"%d/%m/%y\ -\ %H:%M\")}
"粘贴不换行问题的解决方法"
set pastetoggle=<F9>
"设置背景颜色"
set background=dark
"文件类型自动检测,代码智能补全"
set completeopt=longest,preview,menu
"共享剪切板"
set clipboard+=unnamed
"从不备份"
set nobackup
set noswapfile
"自动保存"
set autowrite
"显示中文帮助"
if version >= 603
set helplang=cn
set encoding=utf-8
endif
"设置高亮相关项"
highlight Search ctermbg=black ctermfg=white guifg=white guibg=black
""""""""""""""""""""""""""""""""
"""=>在shell脚本开头自动增加解释器以及作者等版权信息<="""
""""""""""""""""""""""""""""""""
"新建.py,.cc,.sh,.java文件,自动插入文件头"
autocmd BufNewFile *.py,*.cc,*.sh,*.java exec ":call SetTitle()"
"定义函数SetTitle,自动插入文件头"
func SetTitle()
if expand ("%:e") == 'sh'
call setline(1, "#!/bin/bash ")
call setline(2, "#Author: bert ")
call setline(3, "#Blog: https://blog.51cto.com/zpf666 ")
call setline(4, "#Time: ".strftime("%F %T "))
call setline(5, "#Name: ".expand("%"))
call setline(6, "#Version: V1.0 ")
call setline(7, "#Description: This is a production script.")
endif
endfunc
如果需要安装插件最好还是创建一个文件夹 vim
,在里面放置更多的配置文件(包括 .vimrc
),但是不太推荐使用部分比较冗余的插件。
8.2.自动配置
关于 vim
的配置,也可以使用下面这个一键安装命令(只适用 Centos 7
):curl -sLf https://gitee.com/HGtz2222/VimForCpp/raw/master/install.sh -o ./install.sh && bash ./install.sh
然后输入 root
密码即可。
而卸载的命令是 bash ~/.VimForCpp/uninstall.sh
。(这个配置文档可以查看一下)
但是这个脚本有一些限制(只支持 CentOS 7
),您可以查找一下其他的脚本,或者配置文件。
另外如果您不适应这个脚本下 Vim
的缩减(默认两格),则可以在家目录下使用 vim .vimrc
修改下面的代码。
