Vim使用

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前后都加上一个双引号;
NewImage

normal模式执行行:

qa0f:i”$”q

  1. qa: 开始录制宏a
  2. 0f:i”: 首先回到一行的行首,然后查找第一个:开头的字符,i进入insert模式,输入双引号”,然后回到normal模式
  3. $i”q: 去到行尾,i进入插入模式,输入双引号”,q结束宏录制,这样就结束了针对一行的操作

接下来回放宏,并且应用到接下来的每行,需要使用vim的特性,在命令行下执行normal模式的命令,执行:

  1. :VG: V进入行选择模式,G选择剩下的行
  2. :normal @a: 执行normal模式命令,回放宏a

NewImage

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 : 插入当前文件的全路径

标签:

发表评论

邮箱地址不会被公开。 必填项已用*标注