Vim教程

Vim教程

功能

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

模式

  1. 一般命令模式

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

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

异常处理

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

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

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

常用操作

  1. i:进入编辑模式

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

  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. :noh 关闭查找关键词高亮

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

常用技巧

.范式

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
# h
$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>)

vi + ctags

1
2
3
4
5
ctags -R  	# 全局代码索引文件
crtl+]  	# 跳转函数或变量定义
g crtl+]  	# 跳转相同函数或变量定义
crtl+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%