前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >vim使用-常用命令

vim使用-常用命令

作者头像
茶半香初
发布2021-11-26 14:33:23
1.5K0
发布2021-11-26 14:33:23
举报
文章被收录于专栏:程序员那点事

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

  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

vim 常用补全

单词补全

  • control+n/control+p: 搜索当前文本出现过的词语,进行补全,当出现多个选择可以使用control+n或者control+p进行下一个或者上一选择

路径补全

  • control+x + control+f: 进行路劲补全

全能补全

需要开启filetype检测文件类型

  • :filetype no : 开启检测文件类型
  • control+o : 进行全能补全

vim配置

持久化配置文件

新建 ~/vimrc文件,配置常用配置,避免每次打开vim重新设置

代码语言:javascript
复制
" 常用设置
" 设置行号
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 : 插入当前文件的全路径

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/04/25 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • vim 快速移动
    • 单词之间移动
      • 水平移动
        • 页面移动
          • 行间搜索移动
          • vim 快速删除
            • insert模式删除单词或字符
              • normal模式删除
              • vim 快速修改
              • vim 快速查询
              • vim 快速搜索替换
              • vim 多文件操作
                • Buffer
                  • 窗口
                    • Tab(标签页)
                    • vim 文本对象
                      • 文本对象操作方式
                      • vim 复制粘贴
                        • normal模式
                          • insert模式
                          • vim 寄存器
                            • 无名寄存器
                              • 深入寄存器(register)
                              • vim 宏
                              • vim 常用补全
                                • 单词补全
                                  • 路径补全
                                    • 全能补全
                                    • vim配置
                                      • 持久化配置文件
                                      • 常用命令
                                      相关产品与服务
                                      容器服务
                                      腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                                      领券
                                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档