Vim常用命令、配置及插件总结

本文总结了Vim的基础操作,包括多模式切换、常用命令行操作、快速移动、搜索替换、多文件操作等。此外,还介绍了Vim配置和插件,如美化、补全、代码大纲浏览和Python IDE打造等,帮助提升Vim的使用效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本篇是在学习了PegasusWang的课程:玩转Vim 从放弃到爱不释手 后总结的常用操作笔记。此课程从Vim入门开始,由浅入深地讲解了Vim的基础操作、配置及常用插件,可以免去学习的许多弯路,是非常优秀的Vim课程,同时也是免费的。
下面进入我们此次的正文。

基础操作

0.多模式

nomal模式 -> 插入模式
  • a/i/o:光标后进入插入模式/光标前进入插入模式/下面新增一行进入插入模式
  • A/I/O:行尾进入插入模式/行首进入插入模式/上面新增一行进入插入模式
可视化模式
  • v: 进入字符选择
  • V: 进入行选择
  • <C-v>: 进入块选择
常用操作
  • :<C-p> 重复上次命令
  • vim filename1 filename2 -O 在终端下,使用vim同时打开两个文件,且自动垂直分屏
  • zz 让当前行显示在屏幕中间
  • :e! 重新加载并且不保存当前文件
  • :syntax on 打开语法高亮
  • set nu/set nonu 显示行号/不显示行号
  • set hls/noh 搜索词高亮/取消高亮
  • set incsearch 增量搜索
  • set autoindent 打开自动缩进

1.终端命令行操作

  • ctrl+w: 删除上一个单词

  • ctrl+u: 删除当前行

  • ctrl+a: 定位到开始

  • ctrl+e: 定位到结尾

2.快速移动

normal模式:

  • w/W: 移动到下一个word/WORD 开头
    • [ word指的是以非空白符分割的单词,WORD是以空白符分割的单词 ]
  • e/E: 移动到下一个 word/WORD 结尾
  • b/B: 移动到上一个 word/WORD 开头 (backword)
  • hjkl: 代替上下左右按键
  • 0/$: 行首/行尾
  • gg/G: 移动到文本开始位置/移动到文本结束位置
  • ctrl+f / ctrl+u: 向下翻页/向上翻页

3.快速增删改查

  • dw/daw/diw: 删除单词(光标及之后的,包括空格)/删除单词(光标所处单词,包括空格)/删除单词(光标及之后的,不包括空格)

    • a表示around环绕,i表示inner
  • cw/caw/ciw: 删除当前光标后的单词并进入插入模式(包括空格)/删除当前光标所处的单词并进入插入模式(包括空格)/ 删除当前光标所处的单词并进入插入模式(不包括空格)

    • ci" 可以快速删除当前光标所处的由""包裹的内容并进入插入模式
    • ci( 可以快速删除当前光标所处的由()包裹的内容并进入插入模式
    • ci{ 可以快速删除当前光标所处的由{}包裹的内容并进入插入模式

    同理,利用可视化模式的vi" / ( / { 可以做到选中的功能

  • d/dd: 配合文本对象快速删除一个单词/删除整行

  • x: 删除一个字符

  • r/R: 替换一个字符/从当前字符开始一直替换

  • y/p/d: 复制(yank)/粘贴(put)/剪切(delete)

    • yiw/yy: 复制一个单词/复制一行
  • u/ctrl+r: 撤销上一步操作/取消上一次撤销操作

4.搜索替换

normal模式下,:[range] s/[pattern]/[string]/[flags] 搜索并替换,其中:

  • [range]: 文本范围

    • 10,20: 从10到20行

    • %: 全部

  • [pattern]: 源字符串(可正则)

  • [string]: 替换后的文本

  • [flags]: 几个常用标志

    • g(global): 全局范围内执行
    • c(confirm): 每次替换时可以确认或者拒绝修改
    • n(number): 只报告匹配到的次数而不替换

5.多文件操作

相关概念:

  • Buffer: 打开的一个文件的内存缓冲区
  • Window: Buffer 可视化的分割区域
  • Tab: 可以组织窗口(Window)为一个工作区

Buffer操作:

  • :ls 列举当前缓冲区
  • :b [num] 跳转到[num]缓冲区
  • :b [name] 跳转到[name]缓冲区
  • :bpre/bnext/bfirst/blast 跳转到上一个/下一个/第一个/最后一个缓冲区
  • :e [name] 打开[name]文件

Window操作:(<C-w>代表ctrl+w)

  • <C-w> s 水平分割窗口
  • <C-w> v 垂直分割窗口
  • <C-w> w 循环切换窗口
  • <C-w> h/j/k/l 切换到←/↓/↑/→窗口
  • <C-w> H/J/K/L 移动当前窗口向←/↓/↑/→
  • <C-w> = 所有窗口等宽高
  • <C-w> _ / <C-w> | 当前窗口最大化高度/宽度
  • [num]<C-w> _ / [num]<C-w> | 当前窗口高度设为[num]行/列

6.复制粘贴与寄存器的使用

  • :set paste/:set nopaste 在网上复制一段代码后,粘贴进vim之前,为防止缩进错乱需要先使用命令,粘贴后再执行取消命令

  • :reg 查看所有的寄存器

  • "{register} 指定寄存器

  • “” 代表默认寄存器

  • "+ 代表系统剪切板

  • "+ p 将系统剪贴的代码复制到vim中

  • :set clipboard=unnamed 统一寄存器和系统剪贴板

7.宏的使用 - 批量操作

宏的使用分为录制和回放, 适用于批量重复性操作。

  • q[register] 录制宏到[register]寄存器
  • @[register] 回放

批量操作过程:

  1. nomal模式下使用q来录制,同时也是q来结束录制

  2. 使用q[register]选择要保存的寄存器(例如qa),把录制的命令保存其中

  3. 使用@[register]回放寄存器中保存的一系列命令(例如@a)

    V选择一行进入到可视化模式,使用G移动到文件尾部全选剩下的,然后在命令行模式下输入 :normal 就是使用normal模式下的命令, :normal @a 就可以将剩下的全部执行记录下的宏。


对已选中的内容执行normal命令的操作方式:

  • :normal command 执行normal模式下的command命令

  • :<C-p> 重复上次命令

批量操作也可以不使用宏,第二种方式:

  1. 选择需要操作的内容,例如gg + V + G完成文件内容全选

  2. 使用命令 :normal [要执行的normal命令] 完成对选中内容的批量操作

    • 例如 :normal A " 表示对选中内容的每行行尾添加"
    • 可以使用 :<C-p> 重复上次命令

8.补全

  1. <C-n> + <C-p> 补全单词
  2. <C-x> + <C-f> 补全文件名
  3. <C-x> + <C-o> 补全代码,需要开启文件类型检查(:filetype on),安装插件

补全时出现选项条时,<C-n> 往下, <C-p> 往上

9.配色方案

  • :colorscheme 显示当前主题配色
  • :colorscheme <C-d> 显示所有配色
  • :colorscheme 配色名 修改配色

vim配置及插件

1.常用配置

在~/.vimrc文件写入vim的持久化配置:

" 设置行号
set number
" 开启语法高亮
syntax on
" 设置配色方案
set background=dark
colorscheme hybrid

" 设置高亮搜索
set hlsearch
set incsearch
" 按F2 进入粘贴模式
set pastetoggle=<F2>
" 设置折叠方式
set foldmethod=indent

" 一些方便的映射
let mapleader=','
let g:mapleader=','
" 使用jj进入normal模式
inoremap jj <Esc>`^
noremap <C-h> <C-w>h
noremap <C-j> <C-w>j
noremap <C-k> <C-w>k
noremap <C-l> <C-w>l

" json格式化
com! FormatJSON %!python3 -m json.tool


" 插件设置,这里使用了vim-plug插件管理器
call plug#begin('~/.vim/plugged')
Plug 'mhinz/vim-startify'
Plug 'vim-airline/vim-airline'
Plug 'vim-airline/vim-airline-themes'
Plug 'Yggdroot/indentLine' 
Plug 'w0ng/vim-hybrid'
Plug 'altercation/vim-colors-solarized'
Plug 'preservim/nerdtree'
Plug 'kien/ctrlp.vim'
call plug#end()


map <C-n> :NERDTreeToggle<CR>
let g:ctrlp_map = '<c-p>'
  • inoremap: insert non-recursive map,插入模式下的非递归映射
    • n/i/v: normal模式/插入模式/可视化模式
  • <cr> 换行
  • :source +文件路径 激活配置文件

2.常用插件

1.1 美化插件

1.2 配色方案

1.3 文件目录和搜索

~/.vimrc配置:

" nerdtree settings
nnoremap <leader>f :NERDTreeFind<cr>
nnoremap <leader>t :NERDTreeToggle<cr>
" set width
let NERDTreeWinSize=31
" show hidden files
let NERDTreeShowHidden=1
" not show files listed
let NERDTreeIgnore= [
             \ '\.git$', '\.hg$', '\.svn$', '\.stversions$', '\.pyc$', '\.pyo$', '\.swp$',
             \ '\.DS_Store$', '\.sass-cache$', '__pycache__$', '\.egg-info$', '\.ropeproject$',
             \ ]

" ctrlp settings
let g:ctrlp_map = '<c-p>'

配置完成后,<learder>f 打开目录树并定位到当前文件,<leader>t 开关目录树。

使用 <leader>t 打开目录树后,按<Ctrl>wp 可跳转回窗口之前编辑的位置。

1.4 快速定位

~/.vimrc配置:

" easymotion settings
nmap ss <Plug>(easymotion-s2)
  • 此处使用的是递归映射,ss映射到easymotion-s2

配置好后,在nomal模式下输入ss,再输入需要定位的字符(屏幕可视化范围内),再根据高亮字符,选择要去的位置即可完成定位。

1.5 模糊搜索

  • 模糊搜索工具:https://github.com/junegunn/fzf.vim

    • Ag [PATTERN] 模糊搜索字符串(当前目录下所有文件内搜素)
    • Files [PATH] 模糊搜索目录,效果等同于ctrlp
  • 搜索替换插件:https://github.com/brooth/far.vim

    • Far [原单词] [替换单词] [搜索路径]

      • 例如 :Far foo bar **/*.py
    • 再使用 :Fardo 命令确认替换

1.6 python-mode打造轻量Python IDE

git:https://github.com/python-mode/python-mode

~/.vimrc配置:

let g:pymode_python = 'python3'
let g:pymode_trim_whitespaces = 1
let g:pymode_doc = 1
let g:pymode_doc_bind = 'K'
let g:pymode_rope_goto_definition_bind = '<C-]>'
let g:pymode_lint = 1
let g:pymode_lint_checkers = ['pyflakes', 'pep8', 'mccabe', 'pylint']
let g:pymode_options_max_line_length = 120
  • 使用<Ctrl+]>可跳转到光标所处代码的定义
  • 使用<Ctrl+X> + <Ctrl+O> 补全代码
  • 使用 :PymodeLintAuto 整理代码格式
  • 使用 :w 进行代码保存时,会自动检查错误(静态检查)
  • 使用<Ctrl+C>ro 整理python模块导入顺序

1.7 tagbar浏览代码大纲

1.8 代码补全

1.9 代码格式化与静态检查

  • 代码格式化 neoformat:https://github.com/sbdchd/neoformat

    • 安装后还需安装对应语言的格式化库,例如python可安装autopep8,使用pip install autopep8安装,并在 ~/.vimrc 文件中加入如下配置:

      " 指定neoformat在格式化python代码时使用的格式化库
      let g:neoformat_enabled_python = ['autopep8']
      
    • 使用 :Neoformat 格式化代码

  • 静态检查 ale:https://github.com/dense-analysis/ale

    • 安装后还需安装对应语言的静态检查库,例如python可安装pylint,使用pip install pylint安装

1.10 快速注释代码

  • vim-commentary:https://github.com/tpope/vim-commentary
    • 使用 gcc 注释一行代码,使用 gcgc 取消注释一行代码
    • 使用 V 块选一段代码,使用 gc 可注释或取消注释该选中的代码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值