目录
[二、 vim的基本概念](#二、 vim的基本概念)
一、Linux编辑器vim使用
vim是linux系统默认安装的,不需要安装就可以直接使用。
vi/vim的区别简单点来说,它们都是多模式编辑器,不同的是vim是vi的升级版本,它不仅兼容vi的所有指令,而且还有一些新的特性在里面。例如语法加亮,可视化操作不仅可以在终端运行,也可以运行于×window、macos、windows。
二、 vim的基本概念
vim的三种模式(其实有好多模式,目前掌握这3种即可),分别是命令模式(command
mode)、插入模式(Insert mode)和底行模式(last line mode),各模式的功能区分如下:
- 正常/普通/命令模式(Normalmode)
- 控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入Insertmode下,或者到last line mode
- 插入模式(Insert mode)
- 只有在Insertmode下,才可以做文字输入,按「ESC」键可回到命令行模式。该模式是我们后面用的最频繁的编辑模式。
- 底行模式(last line mode)
- 文件保存或退出,也可以进行文件替换,找字符串,列出行号等操作。
- 在命令模式下,*shift+:*即可进入该模式。要查看你的所有模式:打开vim,底行模式直接输入help vim-modes

三、vim的基本操作
进入vim,在系统提示符号输入vim及文件名称后,就进入vim全屏幕编辑画面:
- $vim test.c
- 不过有一点要特别注意,就是你进入vim之后,是处于[正常模式],你要切换到[插入模式]才能够输入文字。
[正常模式]切换至[插入模式]
- 输入a
- 输入i
- 输入o
[插入模式]切换至[正常模式]
- 目前处于[插入模式],就只能一直输入文字,如果发现输错了字,想用光标键往回移动,将该字删除,可以先按一下「ESC」键转到[正常模式]再删除文字。当然,也可以直接删除。
正常模式\]切换至\[末行模式
- shift+;,其实就是输入 :
退出vim及保存文件,在[正常模式]下,按一下「:」冒号键进入「Last line mode」,例如:
- :w(保存当前文件)
- :wq(输入「wq」,存盘并退出vim)
- :q!(输入q!,不存盘强制退出vim)
四、命令模式
从命令模式到插入模式:
- 按i切换进入插入模式「insert mode」,按"i"进入插入模式后是从光标当前位置开始输入文件;
- 按a进入插入模式后,是从目前光标所在位置的下一个位置开始输入文字;
- 按o进入插入模式后,是插入新的一行,从行首开始输入文字。
移动光标:
- 按 gg:快速让光标定位到开始
- 按 G :快速让光标定位到末尾
- n G :快速让光标定位到第n行
- 按 $:移动到光标所在行的"行尾"
- 按 ^ :移动到光标所在行的"行首"
- vim可以直接用键盘上的光标来上下左右移动,但正规的vim是用小写英文字母h、j、
k、l,分别控制光标左、下、上、右移一格,可以在前面加数字 - w:以单词为单位,向后移动,可以在前面加数字
- b:以单词为单位,向前移动,可以在前面加数字
复制:
- yy:复制当前行
- p:光标所在位置进行粘贴
- n+yy:复制当前光标的下面n行
- n+p:光标所在位置进行n次粘贴
剪切:
- dd:剪切当前行,或者删除
- p:将剪切的行复制到当前光标位置
- n+dd:剪切当前行下面的n行,或者删除n行
- n+p:将剪切的行复制n次到当前光标位置
替换:
- r:替换光标所在字符,再按目标字符
- n+r:替换光标所在位置后的n字符,再按目标字符
- shift+~:大小写切换
shift+r:R,会进入替换模式,左下角有一个replace标志。这个模式输入字符,回替换光标位置所在字符。
按Esc可以从替换模式回到命令模式
撤销:
- u:撤销历史操作
- ctrl+r:撤销u操作
一旦退出文件编辑,无法在进行撤销了
但是你只是保存,没有进行q退出,还是可以撤销
删除文字:
- x:删除当前光标位置的字符
- n+x:删除当前光标位置的后n个字符
- X:删除当前光标的前面一个字符
- n+X:删除当前光标的前面n个字符
查找:
- 按shift+3=#:选中单词,按n逆向查找
五、视图模式
按ctrl+v进入视图模式,按Esc从视图模式到命令模式。
注释:
- 按ctrl+v进入视图模式
- 按h,j,k,l选择区域(G选择所有)
- 按shift+i进入插入模式,输入//
- 按Esc就可以将选择的区域注释,并且回到命令模式
取消注释:
- 按ctrl+v进入视图模式
- 按h,j,k,l选择//区域
- 按d就可以取消注释
六、底行模式
在使用末行模式之前,请记住先按「ESC」键确定您已经处于正常模式,再按「:」冒号即可进入末行模式。
- w:保存
- q:退出
- !:强制操作
:w:保存
:q!:退出
:wq:保存退出
:w!:强制保存
:q!:强制退出
:wq!:强制保存退出
列出行号
- set nu:输入set nu后,会在文件中的每一行前面列出行号。
- no nu:取消行号
:!+命令:可以在不退出vim的情况下,执行命令
:%s/hello/world/ :将所有hello替换成world
:vs new_file:在vim里面分屏操作,按ctrl+ww可以切换
:/print:查找print单词。
七、使用vim的技巧
- vim file n:进入vim编辑器,光标在第n行。
- !v:执行最近历史命令v开头的命令
八、vim配置
配置文件的位置
- ·在目录/etc/下面,有个名为vimrc的文件,这是系统中公共的vim配置文件,对所有用户都有效。
- 而在每个用户的主目录下,都可以自己建立私有的配置文件,命名为:"vimrc"。例如,/root目录下,通常已经存在一个.vimrc文件,如果不存在,则创建之。
- 切换用户成为自己执行su,进入自己的主工作目录,执行cd~
- 打开自己目录下的.vimrc文件,执行vim.vimrc
常用配置选项,用来测试
set syntax=on " 语法高亮
set noeb or noerrorbells "关闭错误信息响铃
setconfirm " 在处理未保存或只读文件的时候,弹出确认
setautoindent 自动缩进
set cindent
set tabstop=4 " 设置Tab键的宽度
set softtabstop=4 " 统一缩进为4
set shiftwidth=4
set noexpandtab " 不要用空格代替制表符
set smarttab " 在行和段开始处使用制表符
set number " 显示行号
set history=1000 " 历史记录数
set nobackup "禁止生成临时文件
set noswapfile
set ignorecase "搜索忽略大小写
set hlsearch "搜索逐字符高亮
set incsearch
set gdefault "行内替换
set enc=utf-8 "编码设置
set fencs=utf-8,ucs-bom,shift-jis,gb18030,gbk,gb2312,cp936
set langmenu=zh_CN.UTF-8 "语言设置
set laststatus=2" 总是显示状态行
setruler " 在编辑过程中,在右下角显示光标位置的状态行
set cmdheight=2 " 命令行(在状态行下)的高度,默认为1,这里是2
filetype on " 侦测文件类型
filetype plugin on "载入文件类型插件
filetype indent on " 为特定文件类型载入相关缩进文件
set viminfo+=! " 保存全局变量
set linespace=0 "字符间插入的像素行数目
set wildmenu "增强模式中的命令行自动完成操作
set backspace=2 "使回格键(backspace)正常处理indent, eol, start等
setwhichwrap+=<,>,h,l " 允许backspace和光标键跨越行边界
" 可以在buffer的任何地方使用鼠标(类似office中在工作区双击鼠标定位)
setautochdir " 自动切换当前目录为当前文件所在的目录
setbackupcopy=yes " 设置备份时的行为为覆盖
set ignorecasesmartcase "搜索时忽略大小写,但在有一个或以上大写字母时仍大小写敏感
setnowrapscan " 禁止在搜索到文件两端时重新搜索
setincsearch " 输入搜索内容时就显示搜索结果
sethlsearch " 搜索时高亮显示被找到的文本
setautochdir " 自动切换当前目录为当前文件所在的目录
setbackupcopy=yes " 设置备份时的行为为覆盖
set ignorecasesmartcase "搜索时忽略大小写,但在有一个或以上大写字母时仍大小写敏感
setnowrapscan " 禁止在搜索到文件两端时重新搜索
setincsearch " 输入搜索内容时就显示搜索结果
sethlsearch " 搜索时高亮显示被找到的文本
set mouse=a
set selection=exclusive
set selectmode=mouse,key
set report=0 " 通过使用: commands命令,告诉我们文件的哪一行被改变过
setshortmess=atI " 启动的时候不显示那个援助索马里儿童的提示
set fillchars=vert:\ ,stl:\,stlnc:\ " 在被分割的窗口间显示空白,便于阅读
setshowmatch " 高亮显示匹配的括号
set nocursorline " 不突出显示当前行
set matchtime=5 " 匹配括号高亮的时间(单位是十分之一秒)
set scrolloff=3 " 光标移动到buffer的顶部和底部时保持3行距离
set smartindent "为C程序提供自动缩进
setfoldenable " 开始折叠
setfoldmethod=syntax " 设置语法折叠
setfoldcolumn=0 " 设置折叠区域的宽度
setlocalfoldlevel=1 " 设置折叠层数为
" setfoldclose=all " 设置为自动关闭折叠