leelongcrazy's blog

VIM高阶使用技巧

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! 将命令cmd输出的结果插入到光标所在位置

:r 将文件读入到光标所在的位置

执行shell命令

:! , 在需要编译文件或执行测试脚本的时候好使

:!pwd

:!! 重复前面的命令

命令记录与重放

  1. 按下q+(a...z)寄存器名;
  2. 执行你要完成的操作
  3. 按 q 结束录制
  4. 调用:@+寄存器名(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高级使用指南

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  不闪烁的竖线

IT Vim