vim 快速移动 单词之间移动 word: 指的是以非空白符分割的单词;WORD: 指的是以空白符分割的单词
w/W: 移动到下一个word/WORD开头 e/E: 移动到下一个word/WORD结束 b/B: 回到上一个word/WORD开头 水平移动 I: 移动到行首第一个字符并且进入插入模式 A: 移动到行尾并且进入插入模式 0: 移动到行首第一个字符 ^: 移动到行首第一个非空字符 $: 移动到行尾 g_: 移动到行尾非空白字符第一个非空字符 页面移动 gg: 移动文件的开头 G: 移动文集的结尾 control+o: 快速返回到上一个位置 H/M/L: 移动屏幕的开头(Head),移动到屏幕的中间(Middle)和结尾(End) control+u/control+f: 屏幕上下翻页(upword/forward) zz: 把屏幕至为中间 行间搜索移动 f{char}: 正向查找下一个char,使用逗号继续查找上一个,使用分号查找下一个 F{char}: 反向查找下一个char,使用逗号继续查找上一个,使用分号查找下一个 t{char}: 正向查找下一个char的前一个字符,使用逗号继续查找上一个,使用分号查找下一个 T{char}: 反向查找下一个char的前一个字符,使用逗号继续查找上一个,使用分号查找下一个 vim 快速删除 insert模式删除单词或字符 control+u: 删除上一行 ccontrol+h: 删除上一个字符 control+w: 删除上一个单词 normal模式删除 x: 删除一个字符,可搭配数子实现重复操作 d+文本对象: 比如 daw(d around word),快速删除一个单词,可搭配数子实现重复操作 dd: 删除上一行 dt": 意思是d to ",删除至"位置 d0: 删除到行首 d$: 删除到行尾 vim 快速修改 r:(replace),c:(change),s:(substitute)
normal模式使用r可以替换一个字符。s替换并且进入插入模式 R: normal模式替换字符 S: 删除一行并且进入插入模式 c: 匹配文本对象并且进行修改 cw: 删除一个单词并且进入插入模式 C: 删除至行尾并且进入插入模式 vim 快速查询 使用 :set incsearch 设置增量搜索,边输入搜索边高亮
/或者?进行前向或者反向搜索 使用n/N跳转到下一个或者上一个匹配 使用*或者#进行当前单词的前向和后向匹配 vim 快速搜索替换 格式:
:[range] s/{pattern}/{string}/[flags]
range: 表示范围 比如: 10,20 表示10-20行,% 表示全部 pattern: 表示替换的模式,可以是正则模式 string: 表示替换后的文本 flags: g(global)表示全局范围类执行;c(confirm)表示确认;n(number)表示报告匹配到的次数而不替换 vim 多文件操作 Buffer 什么是Buffer Buffer是只打开的一个文件的内存缓冲区
:ls ls会列举出当前缓冲区,然后使用:b n跳转到第几个缓冲区 :bpre :bnext :bfirst :blast :e 文件名称 编辑新的文件 窗口 什么是窗口
窗口是Buffer可视化的分割区域
一个缓冲区可以分割多个窗口,每个窗口也可以打开不同缓冲区 :sp 水平分割 :vs 垂直分割 control+w: 窗口切换 Tab(标签页) 什么是Tab
Tab是可以容纳一系列窗口的容器(:h tabpage)
命令模式常用命令
tabe {filename}: 在新标签页打开文件 tabc: 关闭当前标签页及其中的所有窗口 tabo: 值保留活动标签页,关闭其它标签页 tabnew {filename}: 新建标签页打开文件 正常模式常用命令
{N}gt: 切换到变化N的标签页 gt: 切换到下一个标签页 gT: 切换到上一个标签页 vim 文本对象 什么是文本对象 比如一个字符,一个单词,一个句子,一个段落
文本对象操作方式 格式:
[number][command][text object]
number: 表示次数 command: 表示命令,d(delete:删除),c(change:替换),y(yank:复制) string: 表示替换后的文本 text object: 是要操作的文本对象;比如w(单词);s(句子);p(段落) 案列:
iw: 表示inner word,如果输入viw,首先进入选择模式,然后iw将选中当前单词 aw: 表示around word,他不但会选中当前单词,还会包含当前单词之后的空格 ci): 修改()内的内容 vis: 选择一个句子 vip: 选择一个段落 vim 复制粘贴 normal模式 y(yank)和p(put),实现复制粘贴 d(delete)和p(put),实现剪切粘贴 insert模式 cmd+c cmd+v进行复制粘贴,但是在代码缩进有问题,可以通过设置 :set autoindent或者 :set paste 和 :set nopaste vim 寄存器 无名寄存器 vim里操作的是寄存器,不是系统剪贴板,默认我们使用d删除或者y复制的内容都是放到了“无名寄存器”。 比如交换字符小技巧:可以使用x将一个字符放到无名寄存器,然后p将无名寄存器里的内容进行粘贴,可以达到交换字符位置的一个目的。
深入寄存器(register) 通过"{register}前缀可以指定寄存器,不指定默认无名寄存器 "ayy: 表示复制当前行到a寄存器,然后"ap,可以把寄存器a的内容粘贴到指定位置 "bdd: 表示删除当前行到b寄存器,然后"bp,可以把寄存器b的内容粘贴到指定位置 "+: 表示复制到系统剪贴板,需要查看vim是否支持,通过:echo has('clipboard')查看,输出1表明支持;然后去到其它文本就可以cmd+v粘贴vim里的内容 "+p: 表示将系统剪贴板内容粘贴到vim里,用于在其它编辑器里想粘贴文本到vim里 可以使用:set clipboard=unnamed 让直接复制粘贴系统剪贴板内容 最常用还是在normal模式下,直接"+p 把系统剪贴板的内容进行粘贴,格式也不会乱;也可以:set clipboard=unnamed 让直接复制粘贴系统剪贴板内容
vim 宏 normal模式下使用q来录制,同时也是使用q来结束录制 使用q{register}选择要保存的寄存器,录制的命令保存在寄存器,然后q结束录制 使用@{register}进行宏回放 例子:需要在如下文本,每行URL前后都加上一个双引号;
normal模式执行行:
qa0f:i"$"q
qa: 开始录制宏a 0f:i": 首先回到一行的行首,然后查找第一个:开头的字符,i进入insert模式,输入双引号",然后回到normal模式 $i"q: 去到行尾,i进入插入模式,输入双引号",q结束宏录制,这样就结束了针对一行的操作 接下来回放宏,并且应用到接下来的每行,需要使用vim的特性,在命令行下执行normal模式的命令,执行:
:VG: V进入行选择模式,G选择剩下的行 :normal @a: 执行normal模式命令,回放宏a vim 常用补全 单词补全 control+n/control+p: 搜索当前文本出现过的词语,进行补全,当出现多个选择可以使用control+n或者control+p进行下一个或者上一选择 路径补全 control+x + control+f: 进行路劲补全 全能补全 需要开启filetype检测文件类型
:filetype no : 开启检测文件类型 control+o : 进行全能补全 vim配置 持久化配置文件 新建 ~/vimrc文件,配置常用配置,避免每次打开vim重新设置
" 常用设置
" 设置行号
set number
colorscheme hybrid
" 按F2进入粘贴模式
set pastetoggle=
" 高亮搜索
set hlsearch
" 设置折叠方式
set foldmethod=indent
” 一些方便的映射
let mapleader= ' ,'
let g:mapleader=','
" 使用jj进入normal模式
inoremap jj `^
"使用leader+w 直接保存
inoremap w :w
noremap w :w
" 切换buffer
nnoremap [b :bprevious
nnoremap [n :bnext
" use ctrl+h/j/k/L switch window
noremap h
noremap j
noremap k
noremap l
"Sudo to write
cnoremap w!! w !sudo tee % >/dev/null
" json格式化
com! FormatJSON %!python3 -m json.tool
常用命令 :syntax on : 高亮显示
:set nu : 设置行号
:set autoindent : 设置自动缩进
::r! echo %:p : 插入当前文件的全路径