VIM学习

普通模式

Esc 进入normal模式
ctrl+c 代替Esc 但是可能中断某些插件 或者使用ctrl+[
gi 回到上一次编辑的地方
:+ctrl+p 上翻执行的命令
:+ctrl+n 下翻执行的命令
:sourec ~/.vimrc 使配置生效

保存退出

:w 保存
:q 退出
:wq 保存退出
:e 重新加载
:e! 重新加载不保存

移动技巧

h 左移
j 下移
k 上移
l 右移
w 移动到下一个单词的开头
e 移动到下一个单词的结尾
b 移动到上一个单词的开头
W 跟w一样,以空白符做分割
E 跟e一样,以空白符做分割
B 跟b一样,以空白符做分割
f 按下f跟上对应字符,移动到该字符,可以使用;继续搜索
t 按下t跟上对应字符,移动到该字符前面,可以使用;继续搜索
F 跟f一样,但是是往前搜索
T 跟t一样,但是是往前搜索
0 移动到行首第一个字符
$ 移动到行尾
^ 移动到第一个非空白字符
g_ 移动到行尾非空白字符
gg/G 移动到文件开头和结尾
ctrl+o 快速返回
H 文件开头
M 文件中间
L 文件末尾
ctrl+u 上翻页
ctrl+f 下翻页
zz 把屏幕置为中间

增删改查

i 在当前字母前面进行插入
a 在当前字母末尾进行插入
o 在当前行下面,另起一行进入插入
I 在当前行行首进行插入
A 在当前行末尾进行插入
O 在当前行上面,另起一行进行插入
x 删除字符

dw 删除一个单词,并且删除空格
diw 删除一个单词,不删除空格
dd 删除一行
dt字符 删除行直到字符结束
d0 删除到行首
d$ 删除到行尾
数字+x 代表删除几个字符

r 替换一个字符
c 配合文本对象进行快速修改
s 删除并且进入插入模式
R 替换一个字符且后面的也可以继续替换
S 删除整行进入插入
C 删除整行进入插入
caw 删除当前单词进入插入
ct字符 删除行直到字符结束,并且进入插入

/ 前向搜索
? 反向搜索
n 下一个匹配
N 上一个匹配

  • 当前单词的前向匹配

当前单词的后向匹配

搜索替换

:[range]s[ubstitute]/{pattern}/{string}/[flags]
range 表示多少行,%代表全部
ubstitute 需要替换的文字
pattern 模式
string 替换后的文本
flag 替换标志

g       表示全局范围执行
c       表示确认,可以确认或者拒绝修改
n       匹配到的次数而不替换

模糊替换
:% s/单词/被替换内容/g
准确替换
:% s/<单词>/被替换的内容/g

hello world hello
hello world
hello_world

Visual可视模式

v 进入visual选择
V 选择行
ctrl+v 方块选择
vs 垂直分屏
sp 水平分屏

编辑模式下快速纠错

% s 全局替换
ctrl+h 删除上一个字符
ctrl+w 删除上一个单词
ctrl+u 删除当前行

多文件操作

buffer

每个文件都是加载到buffer缓冲区中

:ls 查看当前buffer,当前打开的文件
:b n n代表切换到第几个buffer
:bp 切换buffer
:bl 跳转到最后的buffer
:bf 跳转到第一个buffer
:b name name是指文件名

windows

ctrl+w+s 水平分割
ctrl+w+v 垂直分割
:sp 水平分割
:vs 垂直分割
ctrl+w+w 在窗口循环切换
ctrl+w+h 切换左边窗口
ctrl+w+j 切换下边窗口
ctrl+w+k 切换上边窗口
ctrl+w+l 切换右边窗口
ctrl+w+L 把左边窗口切换到右边
ctrl+w+H 把右边窗口切换到左边

tab

:table[dit]{filename} 在新标签页中打开file_name
ctrl+w+T 把当前窗口移到一个新标签页
:tabc[lose] 关闭当前标签页及其中的所有窗口
:tabo[nly] 只保留活动标签页,关闭所有其他标签页
:tabn[ext]{N} {N}gt 切换到编号为N的标签页
:tabn[ext] gt 切换下一标签页
:tabp[revious] gT 切换上一标签页

文本对象

[number]<command>[text object]

number    表示次数
command    表示命令d/c/y
text object    是要操作的文本对象,比如单词w,句子s,段落p

iw 表示inner word 如果键入vim命令,那么首先v将进入选择模式,然后iw将选中当前单词
aw 跟iw一样,但是会选中空格
iW 前后内容,不带空格
aW 前后内容带空格
this is a [word].
this is a [word ].

复制粘贴寄存器

normal模式

yy 复制
p 粘贴
dd 删除and复制
u 还原
yiw 复制一个单词

insert模式

复制错乱,因为大部分vimrc都设置了autoindent
:set paste 设置这个复制内容进来不会自动对齐
:set nopaste 取消 否则自动对齐不生效
:echo has('clipboard') 查看是否支持clipboard 支持1
:set clipboard=unnamed 设置系统剪切板

寄存器

Vim里操作的是寄存器而不是系统剪切板,这和其他编辑器不同
默认我们使用d或者y的内容都放入了五名寄存器中
用x删除一个字符放到五名寄存器,然后p粘贴可以调换两字符

深入寄存器

通过{register}前缀可以指定寄存器,不指定默认用无名寄存器
比如使用 "a + yiw 复制一个单词到寄存器a中,"b + dd 删除当前行到寄存器b中

除了有名寄存器a-z,Vim还有一些其他常见的寄存器

复制专用寄存器 "0    使用yy复制的文本会拷贝到复制的寄存器0
系统剪切板    "+ 可以复制前面加上 "+到系统剪切板
其他寄存器比如 "% 当前文件名, ".上次插入的文本

Vim宏

什么是宏?

宏可以看成是一系列命令的集合
我们可以使用宏录制一系列的操作,然后用于回放
宏可以非常方便地把一系列命令用在多行文本上

如何使用宏?

Vim使用q来录制,同时也是使用q结束录制
使用q{register}选择要保存的寄存器,把录制的命令保存其中
使用@{register}回访寄存器中保存的一系列命令    

给所有链接前后加上""

录制q跟上寄存器的名字 qa
给链接加上""
结束录制按q
选择行,然后@刚刚的寄存器 @a
多选行,在命令行进行normal的执行
    输入:normal 然后跟上@寄存器 @q回车即可    

https://www.baidu.com/?1
https://www.baidu.com/?2
https://www.baidu.com/?3
https://www.baidu.com/?4
https://www.baidu.com/?5
https://www.baidu.com/?6

Vim补全

ctrl+n ctrl+p 补全单词
ctrl+x ctrl+f 补全文件名
ctrl+x ctrls+o 补全代码,需要开启类型检查,安装插件

设置VIM配色主题

:colorscheme 主题名
ctrl+d 查看当前主题进行设置

下载vim主题配置文件

cp 到.vim/colors/ 如果没有这个文件夹自己创建

主题

vim-hybird
solarized
gruvbox

linux下新建一个隐藏文件 vim ~/,vimrc

vim配置

set nu                        "设置行号
colorschemem blue            "设置主题
set syntax on                "设置高亮
:h option-list                "可以查看所有的设置

设置映射

什么是映射?

VIM映射就是把一个操作映射到另一个操作

基本映射指的是normal模式下的映射

使用map就可以实现映射,比如:
:map - x                按-就会删除字符
:map <space> viw        按下空格选中整个单词
:map <c-d> dd            ctrl+d 删除整行
:unmap -                取消-的映射 其他也是同理
vimrc中不需要加:

Vim常用模式normal/visual/insert都可以映射

用nmap/vmap/imap定义映射
    :vmap \ U    按下\就会将visual模式下的U 把选中的目标转成大小写
    :imap <c-d> <Esc>ddi    在插入模式下删除一行,进入normal模式dd然后在进入插入模式

递归与非递归映射

递归映射

:namp - dd
:nmap \ -
这种是递归映射最终是\映射为dd

map系列的命令有递归的风险

如果安装插件,插件映射了同一个按键的不同行为,有冲突就会有一个失效
解决方案就是非递归映射

非递归映射

使用*map对应的nnoremap/vnoremap/inoremap    
建议任何时候都是用非递归映射,拯救自己和插件作者

set pastetoggle=<F2> "F2进入粘贴模式
let mapleader= "," "设置lader键
inoremap <leader>w <ESC>:w<cr> "在插入模式保存

Vim插件

Vim插件是使用Vimscript或者其他语言编写的vim功能扩展
目前Vim有很多插件管理器
    常见的有vim-plug、Vundle、Pathogen、Dein.Vim、volt等

插件列表

vim-startify    vim开屏插件
vim-airline        状态栏美化
indentline        增加代码缩进线
nerdtree        文件目录树管理
ctrlp            模糊搜索文件
vim-easymotion  移动插件
vim-surround    成对编辑
fzf.vim            文本模糊搜索
far.vim            批量搜索替换
vim-go            go语言的代码补全、跳转、格式化等
python-mod        python代码补全、跳转、重构、格式化等
tagbar            代码大纲    
interestingwords 高亮单词
deoplete.nvim    代码补全
coc.vim            代码补全
Neoformat        代码格式化
autoformat        代码格式化
neomake            静态检查
ale                静态检查
lint            静态检查
vim-commentary    代码注释
Fugitive        git插件
vim-gitgutter    git文件改动查看
gv.vim            git查看提交记录

Tmux

开源配置

SpaceVim
vim-config
Comments

添加新评论