Vim 重新学习笔记
三个模式
Insert 编辑模式
1 | a i o # 进入编辑模式 |
- i (insert)
- a (append)
- o (oppen a line below)
Command 模式
1 | :wq # 保存退出 |
Visual (可视)模式
1 | v # 进入 visual 模式 |
如何快速纠错
a/i/o 进入插入模式
1 | ctrl h # 删除上一个字符 |
快速切换 Insert 和 Normal
1 | ctrl c / ctrl [ # 代替 Esc |
使用 hjkl 移动
1 | h # 左 |
在单词之间飞舞
1 | w/W # 移到下一 word/WORD 开头 |
- word 指以非空白符分割的单词
- WORD 以空白符分割的单词
行间搜索移动
1 | f{char} # 移到 char 字符上 |
- ; 该行下一个
- , 该行上一个
水平移动
1 | 0 # 移到行首第一个字符 |
垂直移到
1 | () # 在句子间移动 |
- 插件 easy-motion
页面移动
1 | gg、G # 文件开头/结尾 |
增删查改
增
1 | a/i/o |
快速删除
1 | x # 快速删一个字符 |
- d x 可以搭配数字执行多次
快速修改
1 | r(replace) c(change) s(substitute) # 常用 |
- normal 下 r 可以替换一个字符,s 替换并进入插入模式
- 使用 c 配合文本对象可以快速进行修改
查询
1 | / # 前向搜索 |
- n/N 跳转上一个或者上一个匹配
- 或者 # 进行当前单词的前向和后向匹配
替换命令
substitute
1 | :[range]s[ubsitite]/{pattern}/{string}/[flags] |
- range 范围(:10,20),10-20行,% 全部
- pattern 要替换的模式
- string 是替换后的文本
替换标志位
Flags 常用标志
1 | g(global) # 全局 |
- :1,6 s/self// 查询1-6行有几个 self
- :% s/<quack>/jiao/g 替换所有 quack 为 jiao
Buffer Windows Tab
文件操作相关
- Buffer 是打开的一个文件的内存缓冲区
- 窗口是 Buffer 可视化的分割区域
- Tab 可以组织窗口为一个工作区
在 Buffer 之间切换
- 使用 :ls 列举当前缓冲区,后 :b n跳转到第 n 个
- :bpre :bnext :bfirst :blast
- 或者 :b buffer_name 加上 tab 补全来跳转
Windows 窗口
s 水平分割 v 垂直分割 - 或者 :sp :vs
宏(macro)
可以看做一系列命令合集
How
- q 录制、技术录制
- q{register} 选择要保存的寄存器,把录制的命令保存其中
- @{register} 回放寄存器中的一系列命令
1 | q I" A" |
常见的补全
命令 | 补全类型 |
---|---|
ctrl n | 普通关键字 |
ctrl x/n | 当前缓冲区关键字 |
ctrl x/i | 包含文件关键字 |
ctrl x/J | 标签文件关键字 |
ctrl x/k | 字典查找 |
ctrl x/l | 整行补全 |
ctrl x/f | 文件名补全 |
ctrl x/o | 全能(Omni)补全 |
最常用
- ctrl n 和 ctrl p 补全单词
- ctrl x 和 ctrl f 补全文件名
- ctrl x 和 ctrl o 补全代码
更换配色
1 | :colorscheme # 显示当前主题配色 |
映射
基本映射
- normal 模式下(leadser键即
,
)
- map 可以实现映射,
:map -x
然后按下 - 就会删除一个字符 :map <space> viw
按下空格键时选中整个单词:map <c-d> dd
删除
消除映射
unmap -
imap <c-d> <Esc>ddi
insert 模式映射 ctrl+d 删除一行模式映射映射
- 用 namap/vmap/imap 定义映射只在normal/visual/insert分别有效
:vmap \U
把 visusal 模式下选中的文本大小(u/U转换大小写)
递归与非递归映射
*map 系列有递归风险,如果安装了一个插件,插件映射了同一个按键的不同行为,有冲突就会有一个失效。
非递归映射
- *map 对应的 nnoremap/vnoremao/inoremap
- 任何时候都建议使用非递归映射
示例
1 | let mapleader = "," |
插件
常见的插件管理器
vim-plug,Vundle,Pathogen,Deim
vim-plug
- 安装 vim-plug
1 | curl -fLo ~/.vim/autoload/plug.vim --create-dirs \ |
安装插件
1 | call plug#begin('~/.vim/plugged') |
source ~/.vimrc
并:PlugInstall
vim 美观插件
- 外观
- 修改启动界面: vim-startify
- 状态栏美化:vim-airline
- 增加但代码缩进线条:indentline
- 配色方案
插件推荐网站
文件目录和搜索插件
- 文件目录 nerdtree
1 | " 查找文件所在位置 |
- 模糊搜索器 ctrip.vim
1 | let g:ctrlp_map = '<c-p>' |
Crtl + P 后输入要搜索的内容
模糊搜索fzf.vim
1 | Files . # 搜索当前目录 |
- 快速跳转位置插件 vim-easymotion
映射
1 | unmap ss <Plus>(easymotion-s2) |
- 修改成对内容 vim-surround
1 | ds # delete a surrounding |
- 替换 far.vim
1 | vim duck.go gua.py |
代码
浏览代码
1 | nonormal <leader>t :TagbarToggle<CR> |
vim-interestingwords 可以高亮单词
补全
补全插件
- deoplete.nvim 多语言,模糊搜索
- coc.vim 多语言插件支持
快速注释
vim-commentary gc
注释或取消注释
格式化与静态检查
格式化
Neoformat 需要安装对应语言的格式化库,python的autopep8,js的prettier等
静态检查Lint
neomake、ale 需要安装对应语言的 lint 库如 eslint/pylint/golint
Python 相关
Python-mode 具有基本的补全,跳转,重构,格式化功能
1 | " Python-mode |
Git
- 命令
:Gedit
,:Gdiff
,:Gblame
,:Gcommit
等
vim-gitgutter 显示文件变动
gv.vim :GV
查看提交记录
学习视频