Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Linux命令(34)——vim命令

Linux命令(34)——vim命令

作者头像
恋喵大鲤鱼
修改于 2025-07-01 03:57:15
修改于 2025-07-01 03:57:15
10.7K00
代码可运行
举报
文章被收录于专栏:C/C++基础C/C++基础
运行总次数:0
代码可运行

1.简介

vim是Unix和类Unix操作系统中最通用的全屏幕纯文本编辑器,它是vi的增强版(vi iMproved),与vi编辑器完全兼容,而且实现了很多增强功能。

vim编辑器支持编辑模式和命令模式,编辑模式下可以完成文本的编辑功能,命令模式下可以完成对文件的操作命令,要正确使用vim编辑器就必须熟练掌握着两种模式的切换。默认情况下,打开vim编辑器后自动进入命令模式。从编辑模式切换到命令模式使用"ESC"键,从命令模式切换到编辑模式使用"A"、“a”、“O”、“o”、“I”、"i"键。

2.命令格式

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vim [options] [file ..]
vim [options] -
vim [options] -t tag
vim [options] -q [errorfile]

file …表示一系列使用vi编辑的文件,使用":next"命令可以向前切换所编辑的文件,使用"–“可以向后切换。这个是常用vi启动格式; -:表示待编辑的文件从标准输入读取; -t [tag]:使vi打开编辑文件后,将光标定位到指定的tag; -q [errorfile]:使用quickFix模式启动vi,文件[errorfile]将被读取并展示;关于quickFix模式说明,可以使用”:help quickfix"查看。

3.内置命令说明

vim编辑器提供了丰富的内置命令,有些内置命令使用键盘组合键即可完成,有些内置命令则需要以冒号":"开头输入。常用内置命令如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Ctrl+u:向文件首翻半屏;
Ctrl+d:向文件尾翻半屏;
Ctrl+f:向文件尾翻一屏;
Ctrl+b:向文件首翻一屏;
Esc:从编辑模式切换到命令模式;
ZZ:命令模式下保存当前文件所做的修改后退出vi;
:[行号]:光标跳转到指定行的行首;
:$:光标跳转到最后一行的行首;
gg:跳转到首行;
G:跳转到尾行
Ctrl+g:显示总行数;
x或X:删除一个字符,x删除光标后的一个字符,而X删除光标前的一个字符。删除即剪切;
d:删除选中的文本,删除即剪切;
D:删除从当前光标到光标所在行尾的全部字符。删除即剪切;
dd:删除光标所在行的整行内容。删除即剪切;
ndd:删除当前行及其后n-1行,n为一个数字。删除即剪切;
y:复制选中的文本;
y0:复制光标前一个字符到行首的内容
y$:复制光标后一个字符到行尾的内容
yh:复制光标前的1个字符
yl:复制光标后的1个字符
nyh:复制光标前的n个字符,比如4yh复制光标前的4个字符
nyl:复制光标后的n个字符,比如4yl复制光标后的4个字符
yy:复制光标所在的当前行;
nyy:复制当前行以及其后n-1行,n为一个数字;
p:小写p,粘贴文本操作,用于将缓存区的内容粘贴到当前光标所在位置的下方;
P:大写P,粘贴文本操作,用于将缓存区的内容粘贴到当前光标所在位置的上方; 
/[字符串]:文本查找操作,用于从当前光标所在位置开始向文件尾部查找指定字符串的内容,查找的字符串会被加亮显示; 
?[字符串]:文本查找操作,用于从当前光标所在位置开始向文件头部查找指定字符串的内容,查找的字符串会被加亮显示;
:a,bs/F/T:替换文本操作,用于在第a行到第b行之间,将每行第一个F字符串换成T字符串。其中,":s/"表示进行替换操作。不指定a和b,则默认为当前行;如果b为$,表示替换到末行;如果是a,b为%,即:%s/F/T,表示从第一行替换至末行;
:a,bs/F/T/g:替换文本操作,替换第a行到b行,每一行所有FT。a,b的取值规则同上一条;
a:在当前字符后添加文本;
A:在当前行末添加文本;
i:在当前字符前插入文本;
I:在当前行首插入文本;
no:在当前行后面插入n个空行,n为具体的数值;
nO:在当前行前面插入n个空行,n为具体的数值;
:wq:在命令模式下,执行存盘退出操作;
:w:在命令模式下,执行存盘操作;
:w!:在命令模式下,执行强制存盘操作;
:q:在命令模式下,执行退出vi操作;
:q!:在命令模式下,执行强制退出vi操作;
:e [文件名]:在命令模式下,打开并编辑指定名称的文件;
:n:在命令模式下,如果同时打开多个文件,则继续编辑下一个文件;
:f:在命令模式下,用于显示当前的文件名、光标所在行的行号以及显示比例;
:set number:在命令模式下,用于在最左端显示行号;
:set nonumber:在命令模式下,用于在最左端不显示行号;
jkhl或方向键:光标移动快捷键,分别为上下左右;
u:撤销;
v+移动光标:使用v进行选择模式,移动光标可选择文本;
w:word,右移一个单词,光标停留在单词首部;
e:end,右移一个单词,光标停留单词的尾部;
b:back,左移一个单词,光标停留在单词首部;
(^:移至行头;
)或$:移至行尾;
gd:高亮显示光标所在的单词;

4.vim需知

4.1vim的三大模式

命令模式 (command mode/normal模式,普通模式): 任何时候,不管用户处于何种模式,只要按一下“ESC”键,即可使Vi进入命令模式;我们在shell环境(提示符为$)下输入启动Vi命令,进入编辑器时,也是处于该模式下。

在该模式下,用户可以输入各种合法的Vi命令,用于管理自己的文档。此时从键盘上输入的任何字符都被当做编辑命令来解释,若输入的字符是合法的Vi命令,则Vi在接受用户命令之后完成相应的动作。但需注意的是,所输入的命令并不在屏幕上显示出来。若输入的字符不是Vi的合法命令,Vi会响铃报警。

文本输入模式 (input mode/编辑模式): 在命令模式下输入插入命令i(insert)、附加命令a (append)、打开命令o(open)、修改命令c(change)、取代命令r或替换命令s都可以进入文本输入模式。在该模式下,用户输入的任何字符都被Vi当做文件内容保存起来,并将其显示在屏幕上。在文本输入过程中,若想回到命令模式下,按"ESC"键即可。

末行模式 (last line mode/指令行命令模式/ex转义模式): ex是EXtended的简称,是Unix系统上的纯文本编辑器。ex 命令可启动vim,执行ex命令,并键入visual就可以进入vim的命令模式。

Vim和Ex编辑器的功能是相同的,二者主要区别是用户界面。在Vim中,命令通常是单个键,例如i、a、o等;而在Ex中,命令是以按回车键结束的正文行。Vim有一个专门的“转义”命令,可访问很多面向行的Ex命令。在命令模式下,用户按“:”键即可进入末行模式下,此时Vi会在显示窗口的最后一行(通常也是屏幕的最后一行)显示一个“:”作为末行模式的提示符,等待用户输入命令。多数文件管理命令都是在此模式下执行的(如把编辑缓冲区的内容写到文件中等)。末行命令执行完后,Vim自动回到命令模式。

4.2vim相关编码选项

文件的编码和显示是一个令人头痛的东西,真希望这个世界上只存在utf-8编码,那就没那么痛苦了。vim编码配置涉及4个选项,分别是encoding 、fileencoding、fileencodings和termencoding,四者对应的简写分别为enc、fenc、fencs和tenc。 (1)encoding encoding是vim内部使用编码。vim运行时,其菜单、标签、以及各个缓冲区统一使用encoding作为字符编码。

(2)fileencoding fileencoding为文件采用的编码方式。使用vim打开文件后,可以使用末行命令:set fenc=utf-8将文件编码方式更改为UTF-8,注意,前提是vim打开文件时已经正确识别出文件编码,即未出现乱码。

(3)fileencodings fileencodings用于vim在打开文件的时候进行解码的猜测列表。文件编码没有百分百正确的判断方法,所以vim只能猜测文件编码。~/.vimrc里面fileencodings的设置一般为

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
set fileencodings=utf-8,gb18030,latin1

(4)termencoding 终端所使用的文本编码。这个选项的值用于告诉VIM终端使用了哪种文本编码用于文本输入和显示。如果该值为空,那么它被设置为enc的值。

4.3vim读写文件时编码转换过程

(1)读文件 vim打开文件时,需要将磁盘文件内容载入缓存,并将缓存中的字符转为换终端编码,通过网络传输的方式,传输到终端进行显示。两个转换环节,有一个出错都会出现乱码。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
fileencoding -> encoding -> termencoding

(2)写文件 通过终端编辑文件时,字符编码转换过程是vim读文件的逆过程。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
termencoding -> encoding  -> fileencoding 

**注意:**使用vim读写文件时为避免出现乱码,至关重要的一点就是终端,比如SecureCRT或XShell的编码设置要与vim的termencoding设置相同,如果不同还是还是会出现乱码,尽管vim已经采用正确的编码格式解析了文件。比如将XShell设置为UTF-8。

5.vim常见用法

(1)查看文件编码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
:set fileencoding
或者简写
:set fenc

可显示文件编码格式。这个命令有致命的缺点。原因是只有正常显示文件内容时,该命令显示的文件编码格式才是文件本身的编码格式。因为该命令显示的编码格式并不是文件本身的编码格式,而是当前打开该文件所使用的编码格式。因此,这个命令在网上的说明都是不准确的,特此说明。

(2)修改编码类型 使用vim修改:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
:set fileencoding=gbk
#或者
:set fenc=gbk

使用iconv来修改文件编码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
iconv -f encoding -t encoding inputfile

#比如将一个GBK编码的文件转换成UTF-8编码
iconv -f GBK -t UTF-8 file1 -o file2UTF-8

iconv的参数说明:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
-f, --from-code=名称,原始文本编码
-t, --to-code=名称,输出编码
-l, --list 列举所有已知的字符集
-c 从输出中忽略无效的字符
-o, --output=FILE,输出文件
-s, --silent,关闭警告
--verbose,打印进度信息

(3)指定编码类型浏览文件 如果知道了文件的编码类型,可显示指定编码类型来解析文件,而不用vim去猜测文件的编码类型,事实上猜测的往往是错误。命令如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vim file_name -c "e ++enc=utf-8"

或者在使用vim打开文件之后,在末行模式使用如下命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
:e ++enc=utf-8

(4)vi下新增空白行 vi或者vim命令新增一行空白,在命令行模式下输入o。如果想添加三行的话,是 3o或者n个o。如果 3o 后立即退出插入模式的话,就可以添加三个空白行。如果输入一些文字再退出,可以添加三个相同文字的行。试一下就知道了。

如果想在每一行执行相同的命令,在 vim 里可以用 :g 实现。一般的语法是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
:g/pattern/cmd

它表示在匹配 /pattern/ 这个正则表达式的行上执行 cmd 命令(也称冒号命令)。而 /^/ 这个表达式,用于匹配行首。因为任何一行都有行首,你的要求就很容易实现了:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
:g/^/norm 3o

norm这个命令的意思是,把后面的参数看成是在普通模式下的按键,即命令模式下的按键。

(5)vim中高亮显示选中的单词 将光标移到需要高亮显示的单词上,在命令模式下输入gd,那么就可以将当前的单词在当前文本中全部高亮显示,如下图所示,高亮显示dwBeInvitedUinLen。

(6)vim输入特殊字符 有三种方法,第一种是使用字符编码,第二种是使用二合字母(digraph),三是使用快捷键(Ctrl+字母)。

使用字符编码: vim可以用字符编码插入任意字符,使用此功能可以方便地输入键盘上找不到的字符。使用步骤如下: (1)编辑模式下按下Ctrl+v; (2)如果是ASCII字符,则输入三位十进制ASCII码值,不足三位,前补0。比如输入大写字母A,则输入065;如果是Unicode字符,则输入“u+四位十六进制码值”。比如输入大写字母A,则输入u0041。

更多详情内容可参见vim的帮助文档,末行模式输入:h i_ctrl-v_digit

使用二合字母(digraph): 二合字母顾名思义,使用两个字母的组合来标识特殊字符。使用步骤如下: (1)编辑模式下按下Ctrl+k; (2)输入特殊字符对应的二合字母。可以使用:dig:h digraph-table查看对应二合字母。比如回车符(Carriage Return) 的二合字母是CR。

Ctrl+字母: 在vim中,使用:set list显示所有字符时,经常会看到有^I、^M等符号,代表的字符可以使用:h digraph-table查看,特殊字符列表如下:

在vim的编辑模式下,可使用“Ctrl+字母”进行输入,例如使用"Ctrl+i"或"Ctrl+I"可以输入字符^I(Tab),使用"Ctrl+m"或"Ctrl+M"可以输入字符^M(回车)。

(7)vim其它常见操作

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#显示行号
:set number

#取消行号
:set nonu

#取消高亮显示查找后的字符串
:nohl

#显示换行符
:set list

#不显示换行符 
:set nolist 

6.小结

vim仍有很多未知的东西等待我们去发现,如果vim使用过程中有问题,欢迎留言,一同探讨解决进步。


参考文献

[1]man vim [2]Linux命令大全.vi命令 [3]VIM乱码原因与解决方案 [4]Vim如何插入特殊字符 [5]让VIM彻底告别乱码 [6]vim复制字符

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017年11月29日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Linux命令(34)——vim命令
vi命令是UNIX操作系统和类UNIX操作系统中最通用的全屏幕纯文本编辑器。Linux中的vi编辑器叫vim,它是vi的增强版(vi iMproved),与vi编辑器完全兼容,而且实现了很多增强功能。 vim编辑器支持编辑模式和命令模式,编辑模式下可以完成文本的编辑功能,命令模式下可以完成对文件的操作命令,要正确使用vim编辑器就必须熟练掌握着两种模式的切换。默认情况下,打开vim编辑器后自动进入命令模式。从编辑模式切换到命令模式使用”ESC”键,从命令模式切换到编辑模式使用”A”、”a”、”O”、”o”、”I”、”i”键。
恋喵大鲤鱼
2018/08/03
2.8K0
Linux命令(34)——vim命令
一天一个 Linux 命令(1):vim 命令
本文为joshua317原创文章,转载请注明:转载自joshua317博客 https://www.joshua317.com/article/77
joshua317
2021/09/08
1K0
vim命令总结,新手必看!
vim安装 yum安装 yum -y install vim 编辑安装 wget ftp://ftp.vim.org/ftp/pub/vim/unix/vim-6.4-src2.tar.gz tar xvf vim-6.4-src2.tar.gz cd vim-6.4-src2 ./configure --disable-selinux --enable-cscope make make install 配置 _vimrc配置: "配置目录树快捷键F2启动 map <f2> :NERDTreeToggle<
程序猿的栖息地
2022/04/29
4250
Linux命令之vim三种模式
①光标移动到行首 按键:shift + 6 或 ^(T字母上面的6,不要按小键盘的6)
兮动人
2021/06/11
3.9K0
Linux命令之vim三种模式
08_Linux基础-vim-tmux-字符编码
@TOC08_Linux基础-vim-tmux-字符编码---一. vim文本编辑器-vim(==编辑文本==)Windows:记事本、word、sublime、pycharm能编辑音乐、视频、图片?答:不能,==只能编辑文本==Linux:vi(==字符界面==),vim(==字符界面==),gedit(==图形化==)==unix 都会安装vi==vim 是vi的==加强版==(在vi基础上添加其他功能)vim编辑器作用vim编辑器==作用==:==1、编写脚本、程序====2、修改配置文件====3、
mycpen
2022/09/02
1.8K0
vim使用命令详解
x 删除光标所在字母(其实是光标后) X删除光标前所在字母) dw删除一个单词,光标要在当前单词的第一个字符前面 u 撤销操作 d0删除光标前面的字符 d$或者D删除光标后面的字符 dd删除光标所在的行 ndd删除光标所在行往后的n行(n是自然数,包括本行)
Y大宽
2019/05/22
1.1K0
Linux —vim 编辑器
vi编辑器是linux和unix上最基本的文本编辑器,工作在字符模式下。由于不需要图形界面,vi是效率很高的文本编辑器。尽管在linux上也有很多图形界面的编辑器可用,但vi在系统和服务器管理中的功能是那些图形编辑器所无法比拟的。
Alone-林
2022/08/20
5.8K0
vim 文本编辑器[通俗易懂]
1) 模式转换 a) 【i】:在当前光标所在字符的前面,转为输入模式 b) 【a】:在当前光标所在字符的后面,转换为输入模式 c) 【o】:在当前光标所在行的下方,新建一行,并转换为输入模式: d) 【I】:在当前光标所在行的行首,转换为输入模式 e) 【A】:在当前光标所在行的行尾,转换为输入模式 f) 【O】:在当前光标所在行的上方,新建一行,并转换为输入模式; g) 【cc】删除当前行并输入新内容,相当于S。扩展【#cc】 h) 【C】删除当前光标到行尾,并切换成插入模式
全栈程序员站长
2022/09/06
4.6K0
vim 文本编辑器[通俗易懂]
Vim编辑器基础入门
Vim(Visual Interface|可视化接口),在linux中常常使用的工具,是进行Linux嵌入式编程的必备工具之一; vim最大的贡献就是它的按键系统这也是为什么chrome、idea、atom等编辑器都会提供一个vim mode;
全栈工程师修炼指南
2020/10/23
2K0
Vim编辑器基础入门
vi与vim的区别以及常用命令
vi编辑器只能运行于unix中,而vim不仅可以运行于unix,还可用于windows、mac等多操作平台。
挨踢小子部落阁
2020/03/25
3.3K0
Linux中vi与vim编辑操作
命令模式到编辑模式:插入命令i,附加命令a,打开命令o,修改命令c,取代命令r,替换命令s
CtrlX
2022/11/18
3.6K0
vim精简版教程
vim编辑器 vim trree 编辑器的分类 文本编辑器,ASCII码 字处理器:word 全称 vi:Visual interface vim: Visual interface improved
若与
2018/04/25
2.5K0
vim精简版教程
Linux文本编辑器——vim编译器的全面讲解
文本编辑软件在任何操作系统上都是必备的软件。我们在 Linux 上不缺乏非常现代化的编 辑软件,但是它们都是基于 GUI(图形界面)的编辑软件。 正如你所了解的,Linux 真正的魅力在于命令行。当你正在用命令行工作时,你就需要一个可以在控制台窗口运行的文本编辑器。
神的孩子都在歌唱
2025/03/05
3660
Linux文本编辑器——vim编译器的全面讲解
玩转vim(vi)编辑器
vi编辑器是Linux下的标准编辑器,vi编辑器并非只是用来写程序,还可以用来对一些配置文件进行编辑。vim是vi的加强版,我们一般使用vim对文件进行编辑。本文介绍了vim编辑器的三大模式,以及相应的命令,最后介绍了如何通过vim编辑器的配置文件.vimrc根据自己的需求对vim进行配置。
mindtechnist
2024/08/08
1.3K0
玩转vim(vi)编辑器
linux之vi,vim命令
表示当前行的下一行的行尾b按照单词向前移动 字首e按照单词向后移动 字尾w按照单词向后移至次一个字首H移动到屏幕最上 非空白字M移动到屏幕中央 非空白字L移动到屏幕最下 非空白字G移动到文档最后一行gg移动到文档第一行v进入光标模式,配合移动键选中多行Ctrl+f向下翻页Ctrl+b向上翻页u撤销上一次操作``回到上次编辑的位置dw删除这个单词后面的内容dd删除光标当前行dG删除光标后的全部文字d$删除本行光标后面的内容d0删除本行光标前面的内容y复制当前行,会复制换行符yy复制当前行的内容yyp复制当前行到下一行,此复制不会放到剪切板中nyy复制当前开始的 n 行p,P,.粘贴ddp当前行和下一行互换位置J合并行Ctrl+r重复上一次动作Ctrl+z暂停并退出ZZ保存离开xp交换字符后面的交换到前面~更换当前光标位置的大小写,并光标移动到本行右一个位置,直到无法移动
入门笔记
2022/06/02
23K0
学习vim有这一篇就足够了
vi/vim 的重要性不言而喻,比如登录服务器操作。那么如何掌握呢?看这一篇足矣。更多精彩文章请关注公众号『Pythonnote』或者『全栈技术精选』
小闫同学啊
2020/07/10
1.2K0
快速学习-Linux(VIM编辑器)
Vi编辑器是所有Unix及Linux系统下标准的编辑器,类似于windows系统下的notepad(记事本)编辑器,由于在Unix及Linux系统的任何版本,Vi编辑器是完全相同的,因此可以在其他任何介绍vi的地方都能进一步了解它,Vi也是Linux中最基本的文本编辑器,学会它后,我们将在Linux的世界里畅行无阻,尤其是在终端中。
cwl_java
2020/03/31
2.9K0
快速学习-Linux(VIM编辑器)
第六章·Linux文件管理-VIM编辑
-多年互联网运维工作经验,曾负责过大规模集群架构自动化运维管理工作。 -擅长Web集群架构与自动化运维,曾负责国内某大型金融公司运维工作。 -devops项目经理兼DBA。 -开发过一套自动化运维平台(功能如下): 1)整合了各个公有云API,自主创建云主机。 2)ELK自动化收集日志功能。 3)Saltstack自动化运维统一配置管理工具。 4)Git、Jenkins自动化代码上线及自动化测试平台。 5)堡垒机,连接Linux、Windows平台及日志审计。 6)SQL执行及审批流程。 7)慢查询日志分析web界面。
DriverZeng
2022/09/26
1.6K0
第六章·Linux文件管理-VIM编辑
Vim命令使用说明
vim是我最喜欢的编辑器,也是linux下第二强大的编辑器。 虽然emacs是公认的世界第一,我认为使用emacs并没有使用vi进行编辑来得高效。 如果是初学vi,运行一下vimtutor是个聪明的决定。 (如果你的系统环境不是中文,而你想使用中文的vimtutor,就运行vimtutor zh)
mikelLam
2022/10/31
3.3K0
Vim高手修炼手册:Linux下最全常用命令集锦,Linux环境下vim不可不知的常用命令大全
小白的大数据之旅
2024/11/20
4200
Vim高手修炼手册:Linux下最全常用命令集锦,Linux环境下vim不可不知的常用命令大全
相关推荐
Linux命令(34)——vim命令
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档