Vim 从放弃到拿起
我与Vim
Vim 在我自己的编程史上出现的时间还算蛮早的,我最开始接触编程的时候便接触了Vim, 这也得益于我的学长, 在我开始学编程的时候,学长们便强推 linux 操作系统,我用的是 ubuntu 麒麟。听过学长们说vim有多么强大,于是我第一次接触了vim, 在vimtutor中学习了基本的快捷键,随后貌似也仅停滞于此。 我个人“责怪“让我放弃vim的是java, 我觉得java的语法实在是太复杂,eclipse却让我很快速的写java代码 。所以,我放弃了。 但又是什么让我打算重新拿起它呢? 是非java的语言。 我接触了python,kotlin, groovy, go, javascript,markdown 等等,这里肯定会被看到的人喷,但无所谓的是, 这里不是在与别人争论什么,也不是把:快来用vim吧 这种观念强加给别人, 更不是vim使用的教程,这里仅仅是记录了我对vim, 我个人对vim的每一步, 经过考虑,既然我决定拿起一些事情, 就一定要做到最后,做到最好(仅对我个人而言)。
在这之前,我用sublime写python, 如果我仅限于写python的话,我可能一直会用sublime,甚至会去选择pycharm, 但我还要写groovy, go, kotlin, markdown … , 各种ide出现在我的电脑里,导致他很快就装不下任何东西了,而且同样要在sublime中配置各种语言的解析环境,要记住各种独特的命令,学习成本还是如此之高。
我决定重新学习vim, 是重新学习,而不是继续学习, 在这里我会记录与vim的一点一滴,就像初恋一样。
随笔:我觉得决定要学习一件事情是需要勇气的,因为当你决定的时候,你就要多对自己负一份责任。
(第一步) Vimtutor
k j h l 上下左右
i 在光标前插入
a 在光标后插入
A 在本行末尾插入
o 在本行下插入新行
O 在本行上插入新行
w 光标到下个单词前
e 光标到下个单词末尾
$ 光标到本行末尾
0 光标到本行开始
^ 光标到本行第一个字符
[number] motion 如3e / 3w / 3j 重复执行number次motion
x 删除光标字符
d [number] motion 如 d3w / d3d / d2e / dj / dk / ...
u 撤销当前操作
U 撤销整行操作
CTRL-R 回退撤销操作
CTRL-p 向上查找补全内容
CTRL-n 向下查找补全内容
p 将剪贴板的内容粘贴
r 替换光标出字符
R 持续替换动作直到ESC
ce 删除单词到词尾之后进入insert模式
cw 删除单词到下个单词前进入insert模式
gg 将光标到文件开头
G 将光标到文件末尾
CTRL-G 显示文件信息
CTRL-O 回退到上一次跳转
CTRL-I 撤销回退
/ 正向查找字符
? 逆向查找字符
n 下一个匹配出的字符
N 上一个匹配出的字符
% 匹配与之配对的括号
:%s/old/new 将old替换成new
:%s/old/new/g 替换整个文件内
:%s/old/new/gc 在替换的时候让用户确认
:%s/old/new/ge 没有找到的时候不报错
:#,#%s/old/new 替换从#行到#行
: !cmd 在vim中使用外部命令
:r file 将file中的内容插入到当前光标所在位置
:r !cmd 将命令返回值插入到光标所在位置
v motion 在可视环境下选择文件内容
y 在可视环境下复制内容
:help w 帮助
:help c_CTRL-D
:help insert-index
:help user-manual
纵向编辑
CTRL-V 进入纵向编辑模式
hjkl 选中要编辑的区域
I/A 插入操作并且插入内容
ESC 推出并且全部应用纵向编辑
(第二步) Vim 用户手册
基本快捷键
b 与w效果一样,方向相反
W 跳句
B 反方向跳句
fx 在当前行上查找下一个x字符
3fx 在当前行上查找第三个x字符
Fx 在当前行上逆向查找x字符
tx 停留在查找的字符之前
Tx 逆向tx
; , 上面四个命令都可以用这两个命令重复,不过方向相反
:set number 显示行号
:set ruler 右下角显示光标位置
CTRL-U 内容向下滚动半屏
CTRL-D 内容向上滚动半屏
CTRL-E 内容向上滚动一行
CTRL-Y 内容向下滚动一行
CTRL-F 内容向上滚动一屏
CTRL-B 内容向下滚动一屏
CTRL-O 回跳到上一次位置
CTRL-I 跳回原来的位置
/ 搜索 比如/include
? 反向搜索
n 下一个找到的字符
N 上一个找到的字符
:set ignorecase 忽略大小写
:set noignorecase 不忽略大小写
/ (+ ⬆️箭头) 会找到上一个命令, 支持正则表达式
: 也会存在一个历史
:set hlsearch 设置高亮查询
:hlsearch 设置本次高亮,下次查询不会高亮
:set nohlsearch
:set incsearch 在键入关键字的时候就开始搜索
:scriptnames 找到vim配置文件的位置
ZZ 保存文件并退出
\`回跳到上一次的位置 ma
将光标所在位置标记为a, 这样`a命令就会将光标跳到标记a的地方 ‘a
将只会跳转到那一行,不会准确的跳转到列 [
最后一次修改的当前位置 ]` 最后一次修改的结束位置
x 删除光标字符
X 删除光标前面的字符
D 删除到航尾
C 修改到航尾
s 修改要一个字符
S 修改一整行
r 替换一个字符
R 一直处于替换模式
v 处于visual模式
V visual模式行选择
CTRL-V 纵向选择模式
p 将剪切板中的内容粘贴到光标后
P 将剪切板的内容粘贴到光标前
y 复制
yy 复制一整行
~ 将字符变大写,然后光标跳到下一个字母
定制Vim
你可以配置你的 ~/.vimrc 文件来定制vim配置
在vimrc文件中"符号为注释
set incsearch
set backup 当文件保存的时候,保存起备份文件(以~结尾)
set backupext=.bak 设置备份文件的后缀
set ruler 屏幕右下角显示光标位置
set showcmd 右下角显示命令
set showmode 左下角显示模式
map <F5> i{<Esc>ea}<Esc> 将F5健映射到后面的命令 : 光标前面插入{然后在单词后面插入}
set wrap 一行显示不过来的内容折叠显示
set nowrap 不折叠显示
set xxx& 在选项后面放&使其配置恢复默认值
set sidescroll=10 设置至少显示10个字符的上下文
set list 现在每个制表符都会以^I显示. 同时每行行尾会有一个$字符, 以便 你能一眼看出那些位于一行尾部的多余空格.
set listchars=tab:>-,trail:- 现在每个制表符会以”>—”显示2, 同时行尾空格以”-“显示
set iskeyword 定义了一个word中可以包含哪些字符:iskeyword=@,48-57,_,192-255 > “@”在这里代指所有的字母. “48-57”指ASCII码从48到57的那些字符, 即0到9. “192-255”是可打印拉丁字母.
set cmdheight=3 控制拿出几行来显示信息
syntax enable 如果你的终端支持彩色,这条设置则是打开彩色的大门
set autowrite 自动存档
编辑多个文件
:edit a.txt 关闭当前窗口,打开另一个窗口
vim one.c two.c three.c 编辑三个文件,单需要用 :next 向下切换,:previous 向上切换, last, first 都有其意义
CTRL-^ 也是可以进行文件直接的来回切换
mF 用大写字母做全局标记
"ay 将复制的内容放入寄存器a 如3j”ay
"ap 将寄存器a的内容粘贴出来 如 “ap
:saveas a.y 会将当前文件存储为a.y
分割窗口
:sp 打开一个新的窗口
:close 关闭
:only 关闭其他窗口
:sp filename 新窗口打开filename
:[number]sp 新窗口number行
CTRL-W hjkl 上下左右选择窗口
CTRL-W + 增加当前窗口高度
:vsp 垂直分割
CTRL-W HJKL 将窗口位置移动
:qall 推出所有窗口
:wall 保存所有窗口
:wqall
:qall!
vim -o one.txt two.txt three.txt 为每一个文件打开一个窗口, O可以打开垂直的窗口
vimdiff a.c b.c 比较两个文件的不同
:tabedit filename 页标签
gt 切换页标签
奇技淫巧
替换
:%s/\<GetResp\>/GetAnswer/ge
加速冒号命令
CTRL-W 在命令模式下 删除光标左边一个单词的命令
CTRL-U 删除光标左边全部命令
CTRL-B 将光标移动至命令头
CTRL-E 将光标移动至命令尾
:edit i<Tab> 将会当前目录现有的文件
:edit i<CTRL-P> 反向遍历
:edit i<CTRL-D> 显示所有匹配的上的文件
进退之间
CTRL-Z 挂起Vim
fg 回到挂起的vim
:shell 开启新的shell
(第三步) 安装插件
NERDTree
- 安装
" 用vundle安装插件
set nocompatible
filetype off
set rtp+=~/.vim/bundle/vundle
call vundle#begin()
Bundle 'scrooloose/nerdtree'
call vundle#end()
filetype plugin indent on
常用命令
更新插件:BundleUpdate
清除不再使用的插件:BundleClean,
列出所有插件:BundleList
查找插件:BundleSearch
- 快捷键
CTRL-w-w 左右切换
CTRL-w-r 目录窗口左右切换
o 展开目录文件, 再按就关闭目录
O 递归打开文件
x 合拢选中节点的父目录
X 递归合拢所有
go 在已有窗口中打开文件, 但光标不跳到该窗口
t 中打开选中文件,并跳到新窗口
q 推出tree
P 跳到上级目录节点
p 跳到根目录节点
i 上下分屏
s 左右分屏
SimpyFold
在 .vimrc 文件中加入下面插件,便可以得到一个比较好的代码折叠插件
Plugin 'tmhedberg/SimpylFold'
indentpython
自动缩进插件
vim-scripts/indentpython.vim
airline
vim状态栏强化
vim-airline/vim-airline
ctrlp
全文件搜索
kien/ctrlp.vim
CTRL-p 模糊搜索当前文件夹及子目录
CTRL-f 模糊搜索最近打开的文件
CTRL-j/k 上下选中文件
CTRL-x 在当前窗口水平分屏打开文件
CTRL-v 同上, 垂直分屏
CTRL-t 在tab中打开
折叠
zc 折叠当前行
zo 打开当前行
zM 折叠所有
zR 打开左右
本文讲述了作者从放弃Vim到重新拾起的过程,并分享了Vim的基础操作与高级技巧,包括快捷键、配置方法及实用插件等,适合希望提高编辑效率的开发者阅读。
2万+

被折叠的 条评论
为什么被折叠?



