[导读] 前文总结了vim如何进入,如何保存退出,如何进入编辑模式。本文来总结一些稍微进阶的内容,在normal模式下如何高效的浏览代码。

模式回顾

在normal模式下主要用于浏览代码,那么有哪些方式可以达成移动光标呢,这里总结了从最简易的hjkl键对应单字符移动,到更为高效的移动方式。

Normal模式之乾坤大挪移

注:下面描述的内容都是在normal模式下的光标移到方式

字符移动初级版本:

字移动中级版本:

行段移动进阶版本

  • 0 键移动到当前行首
  • ^ 键移动到当前行首单词首部
  • $ 键移动到当前行尾部字符
  • 键移动到下一行首字符
  • - 键移动前一行首部
  • { 移动到当前段首部
  • } 移动到当前段尾部

注:段是以空行进行分隔的。

高阶移动版本

  • gg移动到文件第一行首部
  • G移动到文件的尾部
  • NG或Ngg移动到第N行,如20G或20gg,表示向移动到第20行
  • x% 向上移动百分比x,如10%
  • % 按匹配移动
    • set matchpairs+=< : > , « : »

高阶版本,大块滚动

  • CTRL-F 向下翻一个窗口
  • CTRL-D 向下翻半个窗口
  • CTRL-U 向上翻半个窗口
  • CTRL-B 向上翻一个窗口

可视模式之妙用

有啥用?这是用于选取文本的:

  • v 进入字符可视选择模式,文本选择是以字符为单位的。
  • V或者shift-v进入行可视选择模式,文本选择是以行为单位的。
  • Ctrl+v 进入块可视化模式,字符移动键可以选择一个矩形内的文本。

    来个栗子:

进入对应模式后,按字符移动键可以实现基本选取功能。这里还将可视模式的一些快捷操作方式总结一下:

  • vi< 选中<>中间内容
  • vi[ 选中[]中间内容
  • vit 选中中间的内容
  • vi” 选中”"中间内容
  • vi’ 选中”中间的内容、
  • vis 选中一个句子
  • vib 选中一个block
  • viw 选中一个单词
  • vip 选中一个段落

选择了文本,就可以实现前文说的复制、粘贴、剪切、删除等操作。

  • y实现复制选中的内容,Y实现复制选中内容及其所在的行
  • d实现删除选中的内容,D实现删除选中内容及其所在的行
  • d实现剪切选中的内容,D实现剪切选中内容及其所在的行
  • p或P 在当前位置粘贴剪贴板的内容,p 粘在光标所在字符后面,P 粘在前面。
  • “>”和“<" 将选中字符右移或左移 shiftwidth位置
  • u U ~ 分别是所有字母变小写、变大写、反转大小写
  • r字符 所有字符替换为新字符,新字符为按完r键后续按的字符

总结一下:

这里总结了常见的各种移动光标的方式,为啥弄这么复杂,因为编辑代码的时候,如果都逐字符移动,这一定时不能忍受的。另外对于可视模式使用非常频繁,这个属于基本功能,也需要多加练习。用的熟了,复制、粘贴、修改才能如鱼得水。

文章出自微信公众号:嵌入式客栈,更多内容,请关注本人公众号,严禁商业使用,违法必究

上古神器vim系列之移动三板斧的更多相关文章

  1. 8. VIM 系列 - 利用 VIM 8.1 版本编译项目和GDB调试

    目录 term 模式 termdebug 模式 VIM版本安装请参考: 0. VIM 系列 - 源码升级最新版本vim term 模式 输入:term 打开此模式,效果如下 这个模式有编辑文本窗口和s ...

  2. Vim 系列笔记一

    Vim 系列笔记一 Vim 简介 什么是VIM ? Vim 是从 Vi 发展出来的一个编辑器,是 Vi 的升级版.而 vi 则是 Unix .类Unix(Linux)系统中自带的编辑器. Vim/Vi ...

  3. 9. VIM 系列 - YouCompleteMe 实现代码补全

    目录 环境准备 插件安装 环境准备 $ sudo apt install build-essential cmake python3-dev python-dev $ sudo apt install ...

  4. 7. VIM 系列 - 程序员利器(语法检测、代码块补全、symbol管理、函数跳转)

    目录 1. 语法检查利器 ale 2. 补全代码块 3. symbol 管理器 taglist.vim 4. 函数跳转 1. 语法检查利器 ale 安装 ale Plug 'w0rp/ale' 配置 ...

  5. 0. VIM 系列 - 源码升级最新版本vim

    卸载原来的vim: $ sudo apt-get remove --purge vim $ suso apt-get clean 下载最新版本源码: $ git clone https://githu ...

  6. 6. VIM 系列 - 全局搜索(ctrlsf.vim)

    目录 全局搜索利器 ag.vim 更强大的全局搜索利器 ctrlsf.vim 全局搜索利器 ag.vim 终端上安装ag: sudo apt install silversearcher-ag vim ...

  7. 5. VIM 系列 - 文件管理

    目录 目录树 文件检索 ctrlp.vim fzf.vim 目录树 安装 nerdtree.vim 插件 Plug 'scrooloose/nerdtree', { 'on': 'NERDTreeTo ...

  8. 4. VIM 系列 - 认识VIM的缓冲区、窗口、标签页

    目录 1. 缓冲区 2. 窗口 3. 标签页 4. 设置一下热键 1. 缓冲区 文件和缓冲区的区别 vim 打开一个文件时,其实是从磁盘中读取文件到内存中,vim的一些操作其实是在操作缓冲区, 当使用 ...

  9. 3. VIM 系列 - 遇见你的第一个插件

    目录 1. 插件管理利器 vim-plug 1.1 安装插件管理器 1.2 配置插件管理器 1.3 安装插件 1.4 更新插件 1.5 回滚插件 1.6 卸载插件 1. 插件管理利器 vim-plug ...

随机推荐

  1. Codeforce-CodeCraft-20 (Div. 2)-A. Grade Allocation

    n students are taking an exam. The highest possible score at this exam is m. Let ai be the score of ...

  2. VMware15.5.0安装MacOS10.15.0系统 安装步骤(上)

    VMware15.5.0安装MacOS10.15.0系统安装步骤(上)超详细! 说明: 本文是目前最新的安装和调配教程且MacOS10.15和10.16版本搭建方法相同,我也会在一些细节地方加上小技巧 ...

  3. Automatic Reference Counting

    NSObject简化版alloc: struct obj_layout { NSUInteger retained; }; + (id)alloc { int size = sizeof(struct ...

  4. PLAI那些事_07 FAE with Deferred Substitution

    FAE-parse : 一成不变 FAE-Value : interp的最终转让值 ;;numV: value ;;closureV: param-FAE(或value,或function) pair ...

  5. P2816 宋荣子搭积木

    描述:https://www.luogu.com.cn/problem/P2816 saruka非常喜欢搭积木,他一共有n块积木.而且saruka的积木很特殊,只能一块块的竖着摞,可以摞很多列.说过s ...

  6. M - 昂贵的聘礼 最短路 dij

    http://poj.org/problem?id=1062 这个题目有一点点特别,因为数据很小也可以用Floyd跑,但是个人比较钟爱dij. 这个dij是怎么走的呢,首先就是普通的建图,然后就是带上 ...

  7. k-modes聚类算法

    为什么要用k-modes算法 k-means算法是一种简单且实用的聚类算法,但是传统的k-means算法只适用于连续属性的数据集(数值型数据),而对于离散属性的数据集,计算簇的均值以及点之间的欧式距离 ...

  8. Druid 0.17入门(4)—— 数据查询方式大全

    本文介绍Druid查询数据的方式,首先我们保证数据已经成功载入. Druid查询基于HTTP,Druid提供了查询视图,并对结果进行了格式化. Druid提供了三种查询方式,SQL,原生JSON,CU ...

  9. CTR学习笔记&代码实现5-深度ctr模型 DeepCrossing -> DCN

    之前总结了PNN,NFM,AFM这类两两向量乘积的方式,这一节我们换新的思路来看特征交互.DeepCrossing是最早在CTR模型中使用ResNet的前辈,DCN在ResNet上进一步创新,为高阶特 ...

  10. Redis学习笔记(七) 数据库

    Redis 服务器将所有的数据库都保存在服务器状态redisServer结构的db数组中,db数组的每个项都是一个redisDB: struct redisServer{ //一个数组保存着服务器中的 ...