一、vi(vim)常用快捷键
1、光标控制 | |
---|---|
h (←) | 光标向左移动一个字符 |
j (↓) | 光标向下移动一个字符 |
k (↑) | 光标向上移动一个字符 |
l (→) | 光标向右移动一个字符 |
Ctrl+f (Page Down) | 向下移动一页 |
Ctrl+b (Page Up) | 向上移动一页 |
0 (Home) | 光标移动到 列首 |
$ (End) | 光标移动到 列尾 |
w | 光标移到下一个 单词首位 |
e | 光标移到下一个 单词末尾 |
G | 光标移动到文档的 最后一行 |
gg | 光标移动到文档的 首行 |
ngg | 光标移动到文档的 第n行 |
n <Enter> | 光标向后移动 n行 |
2、搜索类 | |
/word | 搜索字符 |
:n1,n2s/word1/word2/g | 在n1和n2行间搜索word1,并替换为word2 |
:1,$s/word1/word2/gc | 从第一行到最后一行搜索word1,并替换为word2,替换前需要确认 |
3、复制、粘贴、删除 | |
x | 小写:向后删除一个字符、大写:向前删除一个字符 |
dd | 删除光标所在行 |
ndd | 从光标所在行向下删除n行 |
yy | 复制光标所在行 |
nyy | 从光标所在行向下复制n行 |
p | 小写:在光标的下一行粘贴 、大写:在光标的上一行粘贴 |
u | 撤销上一个操作 |
Ctrl+r | 重做上一个操作 |
4、行号控制 | |
:set number | 显示行号 |
:set nonumber | 不显示行号 |
5、特殊功能 | |
:set expandtab | 缩进用空格来表示 |
:set autoindent | 自动缩进 |
:set cursorline | 给光标添加下划线 |
:set ignorecase | 忽略大小写 |
:set shiftwidth | 每一级缩进的长度 |
:set softtabstop | 按退格键时,退回缩进的长度 |
:set ts | 空格数量(TAB宽度) |
二、vim特殊功能
1、可视化区块(visual block)
在vim中,可以使用vim的可视化区块功能,对文件进行以列为单位的操作,当我们按下 v
、 V
或者 ctrl+v
时,在光标经过的地方就会开始泛白,然后通过 y
命令就可以将泛白处的内容复制下来,当按下 y
后,泛白的区块就会消失,然后将光标移动到需要粘贴的地方,回到一般命令模式后,直接按 p
就可以将复制的内容粘贴到光标所在位置了。
快捷键 | 执行操作 |
---|---|
v(小写) | 字符选择,光标经过的地方会泛白 |
V(大写) | 行选择,光标经过的地方会泛白 |
【Ctrl】+v | 可视区块,可以使用矩形方式选择数据 |
y | 复制泛白区域的数据 |
d | 删除泛白区域的数据 |
p | 粘贴泛白区域的数据到光标所在位置 |
2、多文件编辑
在vim中,可以使用多文件编辑的方式,在多个文件之间复制、粘贴数据。使用vim file_1 file_2 ...
的方式打开多个文件,然后在vim中使用 :files
查看文件中的数据,并使用 :n
或者 :N
来切换编辑的文件,在使用 :files
命令查看文件列表时,文件列表中含有 %a 标识的文件为正在编辑的文件
快捷键 | 执行操作 |
---|---|
:files | 查看目前 vim 打开的所有文件 |
:n | 编辑下一个文件 |
:N | 编辑上一个文件 |
3、多窗口编辑文件
如果需要对多个文件需要参照编辑的话,可以使用 :sp [file_name]
命令进行多窗口模式编辑,在编辑的过程中,可以使用 crtl + w
在多个窗口之间切换编辑
三、设置TAB宽度
如果需要使用指定空格数量替换默认TAB宽度,可以在 /etc/vim/vimrc
中添加以下内容
set ts=4
set softtabstop=4
set shiftwidth=4
set expandtab
set autoindent
set number
四、根据文件后缀名,给新建文件添加默认内容
[root@test-host ~]# cat .vimrc
set ts=4
set softtabstop=4
set shiftwidth=4
set expandtab
set ignorecase
set cursorline
set autoindent
set number
autocmd BufNewFile *.sh exec ":call SetTitle()"
func SetTitle()
if expand("%:e") == 'sh'
call setline(1,"#!/usr/bin/bash")
call setline(2,"#")
call setline(3,"# **********************************************")
call setline(4,"# FileName: ".expand("%"))
call setline(5,"# Author: oldyan")
call setline(6,"# Blog: http://www.yanjun.pro")
call setline(7,"# Date: ".strftime("%Y-%m-%d"))
call setline(8,"# Note: ")
call setline(9,"# **********************************************")
call setline(10,"#")
call setline(11,"")
endif
endfunc
autocmd BufNewFile * normal G