vim常用快捷键与特殊功能

admin 2021年08月07日 921次浏览

一、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的可视化区块功能,对文件进行以列为单位的操作,当我们按下 vV 或者 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