vim是一个文本编辑器,可以在不使用鼠标的前提下完成大部分操作,且作为一个程序员,我们的大部分时间是在Normal mode下用于修改,而不是在insert模式下敲代码,经过20h的训练持续不断使用vim,你会大大加快你敲代码的速度。且插件会让vim这个command-line-based editor适合大型项目中的editor。
目录:
- 终端光标介绍
- 四种不同模式
- Vim插件安装
- 使用 Vim 调试
- 参考内容
参考:
- Editors (Vim)
https://missing.csail.mit.edu/2020/editors/
- Lecture 3: Editors (vim) (2020)
https://www.youtube.com/watch?v=a6Q8Na575qc&t=12s
- .VIMRC文件常用配置及注释
https://blog.youkuaiyun.com/MGoop/article/details/120904414
- 官方文档Vim document
https://www.vim.org/docs.php
- vim入门教程(共3讲)
https://www.bilibili.com/video/BV1Yt411X7mu/
- Vim基本使用方法
https://www.jianshu.com/p/8b679b35c9d5
- Linux Vim编辑器的基本使用
https://blog.youkuaiyun.com/hsforpyp/article/details/113833465
- 如何在Vi / Vim中进行撤消和重做操作
https://zhuanlan.zhihu.com/p/106860607
- 教你如何使用vim调试你的代码
https://www.bilibili.com/video/BV1JT4y1u7aE/?vd_source=61b5ff132eca1d44ecddf022bf9b9def
x.1 终端光标介绍
矩形光标的开口为左面和下面。即i
从光标左侧输入,p
从光标下侧粘贴。
你如果使用鼠标对代码进行框选,则光标落点包含所选代码。
x.2 基础
x.2.1 五种不同模式
vim分为五种模式:normal mode,insert mode,replace mode,visual mode,command-line mode。你需要保证你的大部分时间是在normal mode下使用,这样才能保证代码的高效率。
- Normal: 移动,定位
- Insert: 插入代码
- Replace: 替代代码
- Visual(plain, line, or block):有三种visual模式,普通,行和块
- Command-line:命令模式
normal mode:正常模式,一进入vim,便是进入该模式,主要用来浏览代码。(注意下图左下角什么都没)。
insert mode:编辑模式,写代码时候进入该模式。(注意下图左下角有-- INSERTER –)。
command mode:命令模式,当你敲入在normol模式下敲:
即进入该模式,该模式用来对文档以及vim编辑器进行操作,如文档保存、语法高亮、插件安装等。(注意下图左下角有冒号)。
replace mode:替换模式,可以替换光标所在位置的单词;
visual mode:可视化模式,用于选择部分代码。(注意下图左下角有-- VISUAL –)。
x.2.2 五种模式切换
我们使用<esc>
从任意模式切换到Normal模式。从Normal模式开始,键入i
进入insert模式,键入R
进入replace模式,键入v
进入visual,V
进入visual line,ctrl-v
visual block,:
进入command-line。
如果不知道进入什么模式了,任何模式下,点按两次esc
进入normal mode便可。可以预见到的是,我们经常需要进入normal模式,即我们需要经常用到的键是<esc>
或者ctrl+c
用于从任何模式切换到normal,我们这边建议将CapsLock替换成esc以加快Vim速度。
x.2.3 insert mode
使用i
便可以进入Insert 模式,但是Vim 的核心在于灵活的模式切换和强大的普通模式命令。如果只是依赖插入模式而忽略其他功能,虽然可以完成任务,但无法体现 Vim 的高效特性。
使用vim每次打开一个文件会生成一个buffer区,一个文件可以生成多个buffer区,这样可以方便查看。
从光标处进入Insert mode:i
从光标下方新建一行并进入Insert mode:o
从光标上方新建一行并进入Insert mode:O
从光标右方进入Insert mode:a
x.2.4 command-line mode
在Normal模式下键入:
便可以command-line下各种命令,
输入:
后对文档进行保存,退出等操作。
保存::w
退出::q
保存退出::x
或者:wq
不保存退出::q!
x.2.5 Normal & Visual mode 实现快速开发
- Movement 移动
移动被称作nouns
,因为他们可以指向很多单词,
光标左移:h
。99h
是向左移动99行,下面lkjwb同理。
光标右移:l
光标上移:k
光标下移:j
。记忆方法j - jump。
光标向右移动一个单词:w
。记忆方法w-word。
光标向左移动一个单词:b
。记忆方法b-back[ a word]。
光标移动到单词最尾段:e
。end
光标移动到line最前:0
光标移动到line最后:$
光标移动到line的第一个单词最前:^
向下翻半页:control + d
。d-down。
向上翻半页:control + u
。u-up。
移动到整个文件最尾部:G
移动到整个文件最前部:gg
查找光标所在line的该位置后的第一个英文字母:f{character}
;查找光标所在line的该位置前的第一个英文字母:F{character}
;查找光标所在line的该位置后的第一个英文字母,并让光标停留在它之前:t{character}
;查找光标所在line的该位置前的第一个英文字母,并让光标停留在它之前:T{character}
;查找完毕后可以用,
和;
来前后切换查找的单词;
查找:在Normal mode下输入/和你要查找的内容,如/class
就是我们要寻找关键字class,输入完毕后enter回车。使用n
查找下一个关键字n - next,使用shift + n
查找上一个关键字。
向下翻一页:control + f
。记忆方法f-forward。
向上翻一页:control + b
。记忆方法b-backward。
- Selection 选择
在visual模式下快速选择,
- Edits 编辑
任何鼠标完成的操作在Vim中可以用Edits替换,而Edits也被称作verbs
,因为verbs
是作用在nouns
。所以vim的逻辑是你先用movement定位到nouns
再使用edits对应的verbs
对nouns
进行操作。
重做:u
;再做:control + r
删除(d
delete,但内容会缓存在寄存器中):d
需要配合movement键一块使用,例如dw
-剪切该word,de
-剪切该word到尾部,dd
删除整line,d7d
删除七行,下面ccyypp同理。
改变(c
change,delete后进入insert模式):cc
删除改行并进入insert模式;
复制(y
yank):yy
复制一整行,yw
复制一个word;配合visual mode使用将非常舒适;
粘贴:p
。p-paste。
删除一个字母x
替换一个字母r
- Counts 数数
可以将verbs
和nouns
联合在一起,移动好几个nouns
,如下,
这里更推荐使用7k
实现精准定位,因为少打一个字母;
当然也可以如下精准定位到某一行(如第七行):7gg
;
- Modifiers 更改
i
意味着inside,a
意味着around;ci
是保留标点符号[];ca
是连着标点符号一块删除;它能够快速编辑括号中的内容,算是一个小trick,例如[code by]使用ci[
会变为[],并让你插入内容;
- 扩充信息
自动补全:Vim自动补全代码是补全该文档中已经出现的字段,通过control + n
和 ↑↓ enter
实现。
语法高亮::syntax on
显示行号:set number
打开一个新的窗口::sp
;两个窗口间的切换:control + w +j/k
;新建一个new tab::tabnew
,从new tab返回gt
;关闭所有buffer和tab和windows:qa
x.3 Vim插件安装
Vim编辑器可以自定义配置,也可以安装很多插件。这些操作通过更改~/.vimrc
文件实现。如语法高亮,显示行号就可以直接将.vimrc
如下方法修改实现,在.vimrc
文件中注释通过"
实现 :
version_latest 结果来自浩字不好雨
:
syntax on "语法高亮
set nocompatible "不与vi兼容
"set number "显示行号
"set nu “nu 为 number的缩写
set relativenumber "显示相对行号
set cursorline "突出显示当前行 set cul
set cursorcolumn "突出显示当前列 set cuc
set showmatch "显示括号匹配
set showmode "在底部显示,当前处于命令模式还是插入模式
set bg=dark "设置黑色背景
:colorscheme desert
"设置缩进 1、设置TAB长度为4空格 2、设置自动缩进长度为4空格 3、继承前一行的缩进方式,适用于多行注释
set tabstop=4
set shiftwidth=4
set expandtab "按下tab自动转换为空格
autocmd BufWritePost $MYVIMRC source $MYVIMRC "实现.vimrc保存时自动重启加载
set wrap "设置自动换行 set nowarap 取消自动换行
set showcmd "输入的命令显示出来,看的清楚些
"在命令模式下,按下tab可以自动补全命令
set wildmenu
set wildmode=longest,list,full
set backspace=indent,eol,start "inset模式下,使退格键可以删掉任何东西
set hlsearch "搜索高亮
exec "nohlsearch"
set incsearch "高亮显示搜索的匹配过程,每输入一个字符,就自动跳转到第一个匹配结果
set ignorecase "
set smartcase "
set mouse=a "
set autoindent "自动缩进,按下回车后,下一行会自动根上一行的缩进保持一致
set smartindent "智能缩进
set ruler "在状态栏显示光标当前位置,哪一行哪一列
set undofile
noremap E 5j "向下移动5行
noremap U 5k "向上移动5行
"按下s取消高亮结果显示,本来按下s删除当前字符并进入插入模式
map s :noh<CR>
map S :w<CR>
map Q :q<CR>
map R :source $MYVIMRC<CR>
map <F2> :NERDTreeToggle<CR>
filetype indent on "开启文件类型检查,并且载入与该类型对应的缩进规则。如何,如果编辑的是.py文件,Vim就是会找到Python的缩进规则
version_legacy:
" .vimrc中增加
syntax on
set number
x.3.1 使用源码添加插件
搜索一下vimrc github,我们直接将源码内容粘贴进.vimrc文件中。网址:https://github.com/amix/vimrc/blob/master/vimrcs/basic.vim
x.3.2 使用vim-plug安装插件
搜索vim plug,这里举例使用vim awesome安装the nerd tree。
我们先要安装Vim-Plug
,在终端输入如下命令安装vim-plug。
curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
安装完vim-plug后,我们在vim awesome中搜索到我们需要安装的The NERD tree,按照提示进行安装,vim awesome域名https://vimawesome.com/
。
我们将.vimrc打开,输入刚才网页中的代码后保存退出:
call plug#begin()
Plug 'scrooloose/nerdtree'
call plug#end()
我们打开vim,在底部输入PlugInstall
进行安装:
# 进入vim编辑器
vim
# 进行安装
:PlugInstall
为了自动启动NERDTree,我们打开.vimrc输入如下代码:
autocmd VimEnter * NERDTree
使用control + w
进行两个窗口间跳转。
x.3.3 删除vim-plug
打开.vimrc,将plug中内容删除。
call plug#begin()
"删除"
call plug#end()
" 20230429 delete NERDTree
" autocmd VimEnter * NERDTree
打开vim,输入PlugClean
:PlugClean
x.4 使用 Vim 调试
这里推荐使用vscode + vim插件进行调试,本质上是使用了vscode的调试功能,但是用vim编辑器敲代码。