Skip to content

Vim

基础

Vim 的3种工作模式

一般模式(指令模式)、编辑模式、命令行模式

cpp
:set nu				//显示行号
:set nonu			//不显示行号

将vim置于后台

Ctrl + z 可以将vim 置于后台

fg命令可以调回

快速开始

文本选择

在正常模式下(按ESC进入)按键v进入可视化模式,然后按键盘左右键或h,l键即可实现文本的选择。 其它相关命令:

  • v:按字符选择。经常使用的模式,所以亲自尝试一下它。
  • V:按行选择。这在你想拷贝或者移动很多行的文本的时候特别有用。

复制粘贴

一般模式下删除、复制和粘贴
x,Xx为向后删除一个字符,X为向前删除一个字符
dd剪切(删除)光标所在的那一行
ndd (n 是数字)剪切(删除)光标所在的向下n行
dG剪切(删除)光标所在行到末行的所有数据
yy复制光标所在的那一行
nyy (n 是数字)复制光标所在行开始的向下n行
yG复制光标所在行到末行的所有数据
p,Pp将复制的数据从光标下一行粘贴,P则从光标上一行粘贴
u撤销一步操作
Ctrl + r重复上一个操作
-重复前一个操作

删除特定行,需要在命令行模式下

bash
:20, 30d			// 删除20-30行
bash
y     在使用v模式选定了某一块的时候,复制选定块到缓冲区用 
yy    复制整行(nyy或者yny ,复制n行,n为数字); 
y^    复制当前到行头的内容; 
y$    复制当前到行尾的内容; 
yw    复制一个word (nyw或者ynw,复制n个word,n为数字); 
yG    复制至档尾(nyG或者ynG,复制到第n行,例如1yG或者y1G,复制到档尾)

d     剪切选定块到缓冲区; 
dd    剪切整行 
d^    剪切至行首 
d$    剪切至行尾 
dw    剪切一个word 
dG    剪切至档尾  

x        删除当前光标下的字符
c        功能和d相同,区别在于完成删除操作后进入INSERT MODE
cc       也是删除当前行,然后进入INSERT MODE

移动光标

一般模式下移动光标
h 或左方向键向左移动一个字符
j 或下方向键向下移动一个字符
k 或上方向键向上移动一个字符
l 或右方向键向右移动一个字符
PgUp 或 Ctrl + b向上翻一页
PgDn 或 Ctrl + f向下翻一页
G光标移动到文本的最末行
nG (n 是数字)光标移动到文本的第n 行
gg光标移动到文本的首行

查找替换

一般模式下的查找与替换
/keyword向光标之后寻找名为keyword的字符串,当找到第一个keyword后,该单词高亮显示,按下“n” 继续查找下一个,按下“N”反方向查找下一个
?keyword向光标之后寻找名为keyword的字符串,当找到第一个keyword后,该单词高亮显示,按下“n” 继续查找下一个,按下“N”反方向查找下一个
:n1,n2s/word1/word2/g在n1和n2行之间查找word1字符串并替换为word2
:1,$s/word1/word2/g从第一行到最末行,查找word1并替换word2
:1,$s/word1/word2/gc从第一行到最末行,查找word1并替换word2,替换之前需要用户确认

搜索之后,我们打开文件,发现搜索的字符被高亮了,可以取消

bash
:set nohlsearch
从一般模式进入编辑模式
i在光标前插入字符
I在光标所在行的行首插入字符
a在光标后插入字符
A在光标所在行的行末插入字符
o在光标所在行下插入新的一行
O在光标所在行上插入新的一行

比较常用就是小i和小o

命令行模式

命令行模式
:w保存文本
:w!如果文件属性为只读是,强制保存
:q退出vim
:q!前置退出vim, 不管编辑还是未编辑都不保存退出
:wq保存之后退出
:e!将文档还原成最原始的状态
ZZ等价于:wq
:w [filename]将文档另存为 filename
:set nu在每行行首设置行号
:set nonu取消行号
:n1, n2 w [filename]将n1 到 n2 行的内容另存为 filename 文件中
:! command暂时离开vim, 执行某个Linux命令,例如:! ls /home暂时列出/home下的文件,然后会提示按回车返回vim

Linux 下Vim配置

在根目录下新建.vimrc文件,此文件是Vim的配置文件。在里面输入下面内容:

bash
set tabstop=4 
set softtabstop=4 
set shiftwidth=4 
set noexpandtab 
set nu  
set autoindent 
set cindent

"自动补全
:inoremap ( ()<ESC>i
:inoremap ) <c-r>=ClosePair(')')<CR>
:inoremap { {<CR>}<ESC>O
:inoremap } <c-r>=ClosePair('}')<CR>
:inoremap [ []<ESC>i
:inoremap ] <c-r>=ClosePair(']')<CR>
:inoremap " ""<ESC>i
:inoremap ' ''<ESC>i
function! ClosePair(char)
    if getline('.')[col('.') - 1] == a:char
        return "\<Right>"
    else
        return a:char
    endif
endfunction
  • Tabstop: 表示一个 tab 显示出来是多少个空格的长度默认 8。

  • Softtabstop: 表示在编辑模式的时候按退格键的时候退回缩进的长度当使用 expandtab 时特别有用。

  • Shiftwidth: 表示每一级缩进的长度一般设置成跟 softtabstop 一样。 当设置成 expandtab 时缩进用空格来表示,noexpandtab 则是用制表符表示一个缩进。

  • Nu: 表示显示行号。
  • Autoindent: 表示自动缩进。
  • Cindent: 是特别针对C语言自动缩进。

编辑完成后,保存退出,输入下面命令使配置文件生效

bash
source ~/.vimrc

Released under the MIT License.