Computer

Vim教程

Vim教程

5 分钟阅读2200 字

Vim教程

功能

  1. 命令行模式下的文本编辑器。
  2. 根据文件扩展名自动判别编程语言。支持代码缩进、代码高亮等功能。
  3. 使用方式:vim filename

模式

  1. 一般命令模式

  2. 编辑模式 在一般命令模式里按下i,会进入编辑模式。 按下ESC会退出编辑模式,返回到一般命令模式。

  3. 命令行模式 在一般命令模式里按下:/?三个字母中的任意一个,会进入命令行模式。 命令行在最下面。 可以查找、替换、保存、退出、配置编辑器等。

异常处理

每次用vim编辑文件时,会自动创建一个.filename.swp的临时文件。

如果打开某个文件时,该临时文件swp文件已存在,则会报错。此时解决办法有两种:

  • 找到正在打开该文件的程序,并退出
  • 直接删掉该swp文件即可

常用操作


Vim快捷键速查表
  1. i:进入编辑模式

    • i:在光标所在字符前开始插入
    • a:在光标所在字符后开始插入
    • o:在光标所在行的下面另起一新行插入
    • s:删除光标所在的字符并开始插入
  2. ESC:进入一般命令模式,或者ctrl+[

  3. 移动操作

    h 左箭头键:光标向左移动一个字符

    j 向下箭头:光标向下移动一个字符

    k 向上箭头:光标向上移动一个字符

    l 向右箭头:光标向右移动一个字符

    w : 跳下一个单词

    b:回退上个单词

    %:跳括号

    固定行,在行间移动

    n<Space>:n表示数字,按下数字后再按空格,光标会向右移动这一行的n个字符

    0 或 功能键[Home]:光标移动到本行开头

    $或 功能键[End]:光标移动到本行末尾

    全文内容,移动到某行

    gg:光标移动到第一行,相当于1G

    G:光标移动到最后一行

    :n nG:n为数字,光标移动到第n行

    n<Enter>:n为数字,光标向下移动n行

  4. 查找操作

    /word:向光标之下寻找第一个值为word的字符串。

    ?word:向光标之上寻找第一个值为word的字符串。

    :n1,n2s/word1/word2/g:n1与n2为数字,在第n1行与n2行之间寻找word1这个字符串,并将该字符串替换为word2

    :1,$s/word1/word2/g:将全文的word1替换为word2

    :1,$s/word1/word2/gc:将全文的word1替换为word2,且在替换前要求用户确认。

    n:重复前一个查找操作

    N:反向重复前一个查找操作

  5. 复制粘贴,删除操作

    1. v:选中文本
    2. d:删除选中的文本; daw删除单词
    3. dd: 删除当前行 (当一个操作符命令被连续调用两次时,它会作用于当前行)
    4. y:复制选中的文本
    5. yy: 复制当前行
    6. p: 将复制的数据在光标的下一行/下一个位置粘贴
    7. u:撤销
    8. Ctrl + r:取消撤销
  6. 保存操作

    :w保存

    :w! 强制保存

    :q 退出

    :q! 强制退出

    :wq 保存并退出

  7. 格式化操作

    set paste 设置成粘贴模式,取消代码自动缩进

    :set nopaste 取消粘贴模式,开启代码自动缩进

    >:将选中的文本整体向右缩进一次

    <:将选中的文本整体向左缩进一次

    :set nu 显示行号

    :set nonu 隐藏行号

    gg=G:将全文代码格式化

  8. 修改操作 :h operator 查看操作说明

    c 修改

    d 删除

    g~ 反转大小写

    gu 转换为小写

    gU:转换为大写

    =自动缩进

  9. :noh 关闭查找关键词高亮

  10. Ctrl + q:当vim卡死时,可以取消当前正在执行的命令

常用技巧

.范式

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
# 在行尾加分号
$a;<esc>  	# $ -> 到行尾; a -> 在光标所在字符后开始插入   $a等价A
j$.  		# j -> 光标下移; .:-> 重复操作相当于(A;<esc>)

# 在一个字符前后添加一个空格,示例+号
f+  		# f -> 当前行中向后查找下一个指定字符,这里是+
s<space>+<space><esc> # s -> 删除并进入插入模式 
;.			# ; -> 重复上一次f查找命令的字符

# 查找替换 将content替换成copy;  也可以使用 :%s/content/copy/gc
/content 	# /content -> 查找content字符
* 			# * -> 搜索命令,用于在当前光标位置向后查找下一个匹配项;
cw         	# cw -> 删除当前单词并进入插入模式
copy<esc>
n.      	# n -> 重复上一次搜索命令(*) . -> (cw copy<esc>)

普通模式

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
# 删除某个单词
$ # 跳到行尾单词准备删除
bdw	# b -> 光标移到单词的开头, dw -> 删除该单词
daw	# delete around word

# 删除多个单词
d3w # 删除3个单词
3dw
dw...
c3waaa bbb # c3w -> 删除3个单词并进入插入模式

# 修改数字
<ctrl+a>  # 光标下的数字 +1(或查找下一个数字)
<ctrl+x>  # 光标下的数字 -1
5<ctrl+a> # 光标下的数字 +5

插入模式

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
<ctrl+h> # 删除前一个字符
<ctrl+w> # 删除前一个单词
<ctrl+u> # 删至行首
插入-普通模式: 执行一次普通模式命令, 执行完后,马上就又返回到插入模式 <ctrl+o>
<ctrl+o>zz # zz -> 把当前行显示在窗口正中
# 插入运算数值
<ctrl+r>=6*35<ctrl+enter>  # <ctrl+r>= 使用表达式寄存器
# 插入digraph 查看字母列表:h digraph-table
<ctrl+k>?I
# 替换模式
r,          # 替换单个字符(一步完成)
R,<Esc>  # R 普通模式进入替换模式,当前光标字符换成,

可视模式

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
viw  # 高亮单词
c    # 进行修改
<ctrl+g> # 可视模式及选择模式间切换
v  	# 面向字符的可视模式
V	# 面向行的可视模式
<ctrl+v>  # 面向块列的可视模式
gv   # 重选上次的高亮选取
o  # 切换高亮选取的活动端

vit
U
j.

gUit
j.

插件

vi + ctags

1
2
3
4
5
ctags -R  	# 全局代码索引文件
ctrl+]  	# 跳转函数或变量定义
g ctrl+]  	# 跳转相同函数或变量定义
ctrl+o  	# 返回
vim -t function_name # 直接跳转到该函数

配置文件

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
"语法高亮
syntax on

"启用鼠标
if has("autocmd")
  au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif
  set mouse=a
endif
"显示括号匹配
set showmatch

"缩进
set cindent
set autoindent
set shiftwidth=4

"显示终端
set showcmd

" 设置tab
set ts=4
set expandtab

"括号匹配
inoremap { {}<Left>
noremap {<CR> {<CR>}<Esc>O
inoremap { {
inoremap {} {}
0%