vim 高阶使用技巧
文件保存
另存为,若文件已存在则会覆盖
:w yourSavePath
多窗口保存和退出
:qall 退出全部,如果有窗口没有存盘,都不会退出
:wall
:wqall
:qall!
ESC 可以用 ctrl + 【 代替
编辑
c, 代表change
cc 删除本行,并进入编辑模式
cw 删除单词,原地编辑
拷贝
yw 拷贝一个单词
yy 拷贝一行
dw 删除一个单词
折叠代码
zf 进行折叠
zo 打开折叠,方向键 向右 也可以打开折叠
zc 关闭折叠(只要在被折叠的块中的任意一个语句都可以)
缩进代码
<< 左缩紧 >> 右缩紧 行左移,行右移
V选定后,= 可完成自动格式化代码
查找
/ 代表向下查找
?代表向上查找
*(#) 当光标停留在某个单词上时,输入这条命令可以向下(向上)匹配相同的单词。配合n (N)使用
g*(g#) 和上面的命令相似,匹配包含有此处单词的所有字符串。
替换
单个字符替换用r,覆盖多个字符用R,用多个字符替换一个字符用s,整行替换用S.
:s/vivian/sky/ 替换当前行第一个 vivian 为 sky
:s/vivian/sky/g 替换当前行所有 vivian 为 sky
:n,$s/blue/green/ 替换从第n行开始到最后一行中每行的第一个blue为green
n为数字,表示第几行,若n为 . 点时,表示从当前行开始到最后一行
%表示文件中的每一行
当替换字符中出现/时,可以使用#作为分隔符
:s #blue/#green/#
光标移动
w 按单词移动
e 按单词移动,单词末尾,代表end
b 移动到上一个单词, 代表begin
0 本行开头, 代表第0列
^ 本行开头的字符处
$ 本行结尾
H 屏幕的首行
M 屏幕的中间行
L 屏幕的结尾一行
ctrl + f 向下翻页,page down
ctrl + b 向上翻页,page up
ctrl + d 向下翻半屏
ctrl + u 向上翻半屏
'. 移动光标到上次修改行
字符(h、l)→ 单词 (w、W、b、B、e) → 行 (j、k、0、^、$、:n) → 句子((、))→ 段落({、})→ 屏 (H、M、L) → 页(Ctrl-f、Ctrl-b、Ctrl-u、Ctrl-d) → 文件(G、gg、:0、:$)
定义标记
m+ 字符 可以将此位置标记下来,通过 `+字符快速访问这个位置。
:marks 可以看到所有的标记
`` 或者 '' 双反引号或者双单引号,可以在临近的两个标记之间切换
:delmarks 字符 删除mark标记点
取得外部输入
:r!
:r
执行shell命令
:!
:!pwd
:!! 重复前面的命令
命令记录与重放
- 按下q+(a...z)寄存器名;
- 执行你要完成的操作
- 按 q 结束录制
- 调用:@+寄存器名(a-z)
@@ 为重复上一次调用
显示当前编辑文件名及行数
ctrl + g 等价于命令:f
两行合并为一行
在需要合并两行的第一行,按 J 即可
同时删除多行
- start, end d
vim中diff文件
如果已经打开了一个文件,则:
:vert diffsplit compare_file
如果都还没有打开,则:
vi -O file1 file2 # 文件左右并排
vi -o file1 file2 # 文件上下并排
清空编辑文件内容
ggdG
将已保存文件的tab替换成4个空格
:set ts=4
:set expandtab
:%retab!
匹配空白行
/^s*$ # 匹配空白行
g/^s*$/d # 删除文档中的所有空白行
参考资料
Vim 开发环境配置
大佬share的vim配置 https://github.com/andyshrk/dotvim
插件管理:
https://github.com/junegunn/vim-plug
插件:
模糊匹配:https://github.com/junegunn/fzf
匹配工具:https://github.com/Yggdroot/LeaderF
https://github.com/ludovicchabant/vim-gutentags
vim 分屏显示
https://blog.csdn.net/lovelirui/article/details/6282978
vim 使用
定义/调用跳转
ctrl + ] : 跳转到定义位置
ctrl + o : 跳转到调用位置 或者 ctrl + t
为不同的文件设置不同的缩进tab宽度
autocmd FileType python set ai
autocmd FileType python set sw=4
autocmd FileType python set ts=4
autocmd FileType python set sts=4
autocmd FileType c,cpp set ai
autocmd FileType c,cpp set sw=8
autocmd FileType c,cpp set ts=8
autocmd FileType c,cpp set sts=8
autocmd FileType sh,bash,shell,html,javascript set ai
autocmd FileType sh,bash,shell,html,javascript set sw=2
autocmd FileType sh,bash,shell,html,javascript set ts=2
autocmd FileType sh,bash,shell,html,javascript set sts=2
给代码自动添加注释
autocmd BufNewFile *.py exec":call Python()"
func Python()
call append(0,"#!/usr/bin/env python")
call append(1,"# coding=utf-8")
call append(2,"# Author: leelongcrazy ")
call append(3,"# Date: " .strftime("%Y-%m-%d %H:%M"))
call append(4,"# Filename: " .expand("%:t"))
call append(5,"# Describe: ")
endfunc
autocmd BufNewFile *.sh exec":call Shell()"
func Shell()
call append(0, "#!/bin/bash")
call append(1, "# Author: leelongcrazy")
call append(3,"# Date: " .strftime("%Y-%m-%d %H:%M"))
call append(2, "# Filename: " .expand("%:t"))
call append(3, "# Describe: ")
endfunc
设置光标样式
" 光标样式设置
let &t_SI="\<Esc>[6 q" . "\<Esc>]12;white\x7" " 插入模式
let &t_SR="\<Esc>[3 q" . "\<Esc>]12;blue\x7" " 替换模式
let &t_EI="\<Esc>[2 q" . "\<Esc>]12;green\x7" " 普通模式
" 1 -> blinking block 闪烁的方块
" 2 -> solid block 不闪烁的方块
" 3 -> blinking underscore 闪烁的下划线
" 4 -> solid underscore 不闪烁的下划线
" 5 -> blinking vertical bar 闪烁的竖线
" 6 -> solid vertical bar 不闪烁的竖线