1.Vim的概念和基本操作,比如移动和增删改查如何
1.输入Vim命令进入Vim
进去之后似乎没法输入东西,起始默认进去是normal模式使用
:q可以退出Vim
2.开始编辑
进入编辑模式就可以像其他编辑器一样编辑了
使用i(insert)进入编辑模式,
开始输入文字表示(insert),a(append),o(open a line below)
使用Esc又可以回到normal模式。使用:wq保存退出
w : write q :quit
- a append 当前位置后面插入
- i insert 当前位置插入
- o open a line below 在下行插入
- A append after Line 在行尾插入
- I insert before line 在行首插入
- O append a line above 在上行插入
3."怪异"的Vim模式
Vim和其他很多编辑器的区别在于多种模式
3.1进入Vim默认是normal(普通)模式?为什么不是编辑模式呢
1. 进入Vim默认是normal(普通)模式。使用Esc从插入回到普通模式
2. 普通模式下可以进行各种命令操作和移动
3.大部分情况下你是在浏览而不是编辑,所以Vim默认是normal
3.2使用a(append)insert)等进入编辑模式
3.3还有:cmd命令模式和v(isual)可视化模式
Command(命令)模式
- Normal模式下输入:之后执行命令,比如保存退出:wq-气呵成
- 顾名思义,执行Vim命令,比如保存:W,退出:q
- 比如分屏 :vs(vertical split) 竖分屏 :sp(split)行分屏
- :set nu 显示行号
- 比如使用 :% s/foo/bar/g全局替换 将foo替换为bar
- /java 查找java
- :% s/java/python/g 将java替换为python
- :syntax on 语法高亮显示
3.4Visual(可视)模式
Visual模式一般用来块状选择文本
- Normal模式下使用v进入visual选择
- 使用V选择行
- 使用ctrl+v进行方块选择
4.如何快速纠错
- 代码就像人生,总是经常出错,需要我们快速修正
- 进入Vim之后首先使用ali/o之一进入插入模式
- ctrl+h删除上一个字符,
- ctrl+w删除上一个单词,
- ctrl+u删除当前行
- ctrl+a 开头
- ctrl+e 结尾
- ctrl+b 前移
- ctrl+f 后移
- 以上几个快捷键可以用在很多地方,比如终端
5.快速切换insert和normal模式很多键盘的键位设置,Esc按起来不方便,
- 切换到normal使用Ctrl+c代替Esc(但是可能会中断某些插件)或者ctrl+[
- gi快速跳转到你最后一次编辑的地方并进入插入模式
- 在配置章节我们会讲解如何映射方便的快捷键来替代Esc
6.让键盘适应工具
- 键盘的选择会影响你的编辑速度
- 选择Esc和Ctrl比较容易触碰到的键盘使用Vim你可以使用HHKB或者Poker2这种迷你键盘
- 使用软件修改键位,比如CapsLock改成频繁使用到的Ctrl
7.反人类的hjkl众所周知,vim normal模式使用了反人类的hjkl来移动
- 据说编辑器作者在编写vim的时候键盘还没流行上下左右按键
- 左(h),j(下),k(上),右(1),移动也不会让手指脱离主键盘区
- 相信我,逼着自己使用hjkl一段时间之后,你会体会到它非常有效率
8.在单词之间厂飞舞
- 在单词之间移动是我们浏览操作中最常使用的命令
- w/W移到下一个word/WORD开头。e/E下一个word/WORD尾
- b/B回到上一个word/WORD开头,可以理解为backword
- word指的是以非空白符分割的单词,WORD以空白符分割的单词
9.行间搜索移动
同一行快速移动的方式其实是搜索一个字符并且移动到该字符
- 使用fchar}可以移动到char字符上,t移动到char的前一个字符
- 如果第一次没搜到,可以用分号(:)/逗号()继续搜该行下一个/上一个
- 大写的F表示反过来搜前面的字符
10.Vim水平移动
- 如何快速移动到一行的行首或者行尾呢?
- 0移到行首第一个字符,^移到第一个非空白字符
- $移动到行尾,g_移动到行尾非空白字符
- 记住常用的0和$就可以满足日常需求了
11.Vim垂直移动
- 我们还可以在句子(sentence)和段落(paragraph)间移动(不常用)
- 使用括号()在句子间移动,你可以用:help(来查看帮助
- 使用{}在段落之间移动 插件章节我们会讲如何
- 用easy-motion插件移动,这些命令就都不用记忆啦
:help ( 查看(命令使用方式
12.Vim页面移动
- gg/G移动到文件开头和结尾,你可以使用ctrl+o快速返回
- H/M/L跳转到屏幕的开头(Head),中间(Middle)和结尾(Lower)
- Ctrl+u.ctrl+f上下翻页.(upword/forward),zz把屏幕置为中间
13.Vim快速删除
- 如何快速删除一个字符或者单词呢?
- Vim在normal模式下使用x快速删除一个字符
- 使用d(delete)配合文本对象快速删除一个单词daw(d around word)
- d和x都可以搭配数字来执行多次
14.Vim 快速修改
- 相比删除,更常用修改,一般是删除之后改成我们期望的文本常用有三个,r(replace),c(change),s(substitute)
- normal模式下使用r可以替换一个字符。s替换并进入插入模式
- 使用c配合文本对象,我们可以快速进行修改
15.Vim查询
- 查询单词也是一个常用操作
- 使用/或者?进行前向或者反向搜索
- 使用n/N跳转到下一个或者上一个匹配
- 使用*或者#进行当前单词的前向和后向匹配
16
高亮 :set hls
增量搜索 :set incsearch
`17.``Vim替换命令
- substitute命令允许我们查找并且替换掉文本,并且支持正则式
- [range]s[ubstitute]/pattern)/(string)/[flags]
- range表示范围比如:10,20表示10-20行,%表示全部oattern是要替换的模式,string是替换后文本
- 替换标志位
- Flags有几个常用的标志
- g(global)表示全局范围内执行
- c(confirm)表示确认,可以确认或者拒绝修改
- n(number)报告匹配到的次数而不替换,可以用来查询匹配次数
18.Buffer Buffer-什么是缓冲区?
- Vim打开一个文件后会加载文件内容到缓冲区
- 之后的修改都是针对内存中的缓冲区,并不会直接保存到文件
- 直到我们执行:w(write)的时候才会把修改内容写入到文件里
19.Buffer切换
- 那如何在buffer之间切换呢?
- 使用:1s会列举当前缓冲区,然后使用:bn跳转到第n个缓冲区:
- bpre:bnext:bfirst:blast
- 或者用:b buffer-name加上tab补全来跳转
20.Window窗口
- 窗口是可视化的分割区域 一个缓冲区可以分割成多个窗口,每个窗口也可以打开不同缓冲区
- <Ctrl+W>s水平分割,<Ctrl+w>v垂直分割。或者 :sp和 :VS
- 每个窗口可以继续被无限分割(看你屏幕是否够大)
21.如何切换窗口
切换窗口的命令都是使用Ctrl+w(window)作为前缀
命令
В途
C-w>w
在窗口间循环切换
<C-w>h
切换到左边的窗口
kC-w>j
切换到下边的窗口
<C-w>k
切换到上边的窗口
kC-w>l
切换到右边的窗口
22.Tab(标签页)将窗口分组
Tab是可以容纳一系列窗口的容器(ch tabpage)
- Vim的Tab和其他编辑器不太一样,可以想象成Linux的虚拟桌面比如
- 一个Tab全用来编辑Python文件,
- 一个Tab全是HTML文件相比窗口,
- Tab一般用的比较少,Tab太多管理起来也比较麻烦
23.Tab(标签页)操作
Tab使用不多,简单了解一下常用操作就好命令用途
:tabe[dit]{filename} 在新标签页中打开{filename}
<C-w>T 把当前窗口移到一个新标签页
:tabc[lose] 关闭当前标签页及其中的所有窗口
:tabo[nly] 只保留活动标签页关闭所有其他标签页
如何切换不同的标签页,一般建立两个就好,太多不好操作Ex命令
:tabn[ext](N
:tabn[ext]
:tabp[revious]
普通模式命令
用途
N}gt gtgт
切换到编号为N}的标签页
切换到下一标签页切换到上一标签页
24.Text Object(文本对象)
- 如果你学过主流的编程语言,一定知道面向对象编程
- Vim里文本也有对象的概念,比如一个单词,一段句子,一个段落
- 很多其他编辑器经常只能操作单个字符来修改文本,比较低效
- 通过操作文本对象来修改要比只操作单个字符高效
25.文本对象操作方式
- 之前我们已经使用过文本对象了,回忆下dw(删除一个单词) [number]<command >[text object]
- number表示次数,command是命令,d(elete),c(hange),y(yank)
- text object是要操作的文本对象,比如单词w,句子s,段落p
26.Vim Normal模式复制粘贴
- 初学者会感觉Vim复制粘贴比较奇怪,先从normal模式学习normal模式下复制粘贴分别使用y(yank)和p(put),剪贴d和p
- 我们可以使用v(visual)命令选中所要复制的地方,然后使用p粘贴
- 配合文本对象:比如使用yiw复制一个单词,yy复制一行Vim里的剪贴(cut)复制(copy)粘贴(paste)分别是delete/yank/put
27.Insert模式下的复制粘贴
- 很多人会使用鼠标进行选中,然后使用ctrl+v或者cmd+v粘贴这个和其他的文本编辑器差不多,但是粘贴代码有个坑
- 很多人在vimrc中设置了autoindent,粘贴Python代码缩进错乱
- 这个时候需要使用:set paste和:set nopaste解决
28.什么是Vim的寄存器?
- 你有没有好奇?Vim在normal模式下复制/剪贴的内容去了哪?
- Vim里操作的是寄存器而不是系统剪贴板,这和其他编辑器不同
- 默认我们使用d删除或者y复制的内容都放到了"无名寄存器"
- 用×删除一个字符放到无名寄存器,然后p粘贴,可以调换俩字符
29.如何使用宏
- 宏的使用分为录制和回放,是不是有种拍电影的感觉Vim使用q来录制,同时也是q结束录制
- 使用q{register)选择要保存的寄存器,把录制的命令保存其中
- 使用@{register}回放寄存器中保存的一系列命令
- - 现在你知道宏怎么用了,如何解决刚才的问题呢?先给一行加上双引号,然后再回放到其他所有行
- 我们先使用q开始录制,给一行加上双引号,之后使用q退出
- 在剩下的所有行中回放录制的宏
31.Vim中常见的补全
Vim中有很多种补全的方式
命令
补全类型
<C-n
普通关键字
<C-xx<C-n2 |当前缓冲区关键字
<C-x<C-i |包含文件关键字
<C-x><C-1> |标签文件关键字
<C-x<C-k> |字典查找
<C-x<C-1>1整行补全
<C-x><C-f> |文件名补全
<C-x><C-o> |全能(0mni)补全
32.Vim更换配色
- 很多现代化的编辑器和IDE都支持更换主题,Vim当然也可以
- 使用:colorscheme显示当前的主题配色,默认是default
- 用:colorscheme <ctrl+d>可以显示所有的配色
- 有中意的配色后,用:colorscheme配色名就可以修改配色
33.如何编写Vim配置文件
- 如何编写自己的Vim配置文件呢?
- Linux/Unix下新建一个隐藏文件vim ~/.vimrc
- windows系统vim$MYVIMRC,通过环境变量编辑配置文件
- 接着我f就可以开始自定义自己的配置了
2.配置Vim,编写自己的vimrc文件
" 常用设置
" 设置行号
set number
colorscheme hybrid
" 按F2进入粘贴模式
set pastetoggle=<F2>
" 高亮搜索
set hlsearch
" 设置折叠方式
set foldmethod=indent
" 一些方便的映射
Let mapleader= ','
let g:mapleader=','
" 使用jj进入normal模式
inoremap jj <Esc>`^
"使用leader+w 直接保存
inoremap <leader>w <Esc> :w<cr>
noremap <leader>w :w<Cr>
" 切换buffer
nnoremap <silent> [b :bprevious<CR>
nnoremap <silent> [n :bnext<CR>
" use ctrl+h/j/k/L switch window
noremap <C-h> <C-w>h
noremap <C-j> <C-w>j
noremap <C-k> <C-w>k
noremap <C-1> <C-w>l
"Sudo to write
cnoremap w!! w !sudo tee % >/dev/null
" json格式化
com! FormatJSON %!python3 -m json.tool
" 插件设置,这里使用了vim-plug
call plug#begin('~/ . vim/plugged')
"安装插件只需要把github 地址放到这里重启后执行:PlugInstall 就好了
PLug 'mhinz/vim-startify'
PLug 'scrooloose/nerdtree'
call plug#end()
source ~/.vimrc