Vim 从放弃到拿起
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
ta
跳到a单词的前面
fa
跳到a单词上
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
上一个匹配出的字符
*
光标放在单词前面,可以全文匹配这一单词
g*
光标放在单词前面,可全文匹配这一行
%
匹配与之配对的括号
:%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
打开左右
Mac Shell
ctrl a
跳到行首
ctrl e
跳到行尾
ctrl w
删除光标前一个字符串
esc b
光标跳到前一个字符首
esc f
光标跳到后一个字符末尾
ctrl u
删除光标之前的字符
ctrl l
清屏