热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Vim命令初学者指南

我认为可能是时候记住vim命令了。在我的高中时,我们所有的CS课程都要求我们学习emacs和终端命令。虽然我确实对vim有粗略的了解(足以保存gitco

我认为可能是时候记住vim命令了。 在我的高中时,我们所有的CS课程都要求我们学习emacs和终端命令 。 虽然我确实对vim有粗略的了解(足以保存git commits并退出窗口),但我并不一定具有足够的知识来完全忽略键绑定。

最近,我偶然发现了以模仿《塞尔达传说》为原型的可爱的基于文本的游戏Vim Adventures。 它教了一些更基本的vim命令,并大大降低了学习曲线(特别是vi和vi以其界面极其简约而著称,但其中包含许多通常对于常规使用至关重要的快捷方式-有点像街头霸王和VSCO)。

无论如何,随着我在游戏中的进展,我意识到拥有某种速查表可能会有所帮助。 游戏以特定顺序列出了您需要了解的所有主要命令。

这是我的词汇表版本,但有更多的顺序:

一般

[count]:指定命令将被迭代的次数,默认为1

:删除光标后面的最后一个字符

yank:存储文本,但不修改文本(复制文本)

标记:为导航目的在文件内设置的隐藏位置

  • `:将光标直接放在标记上
  • ':将光标置于标记行的第一个非空白字符上

寄存器:指定存储在内存中的文本。 有九种类型:

  • 未命名的寄存器“”
  • 编号寄存器“ 0-” 9
  • 小删除寄存器“-
  • 命名寄存器“ a-” z
  • 黑洞寄存器“ _
  • 四个只读寄存器“; /”,/“%/”#
  • 表达式寄存器“ =
  • 选择和下降寄存器“ * /” + /”〜
  • 最后搜索模式“ /

nu,nonu:在文本的每行前面显示行号

  • :set nu:显示行号
  • :set nonu:隐藏行号
  • :set nu !:切换行号
  • :set nonu !:切换行号。

主要

Esc:退出键-将当前模式退出到“命令模式”

i:用于插入文本的插入模式

::用于插入命令的最后一行模式(保存文档,帮助)

q:允许您退出或退出vi

  • q !:强制退出
  • wq:退出,将修改后的文件写到原始文件

卷动

[count] h:将光标向左移动一个空格

[count] j:将光标向下移动一个空格

[count] k:将光标向上移动一个空格

[count] l:将光标向右移动一个空格

[count] w:将光标移至下一个单词的开头(标点符号视为单个单词)

[count] W:将光标移动到下一个单词的开头(单词是由空格分隔的字符/标点的序列)

e:将光标移至下一个单词的末尾(标点符号视为单个单词)

E:将光标移至下一个单词的末尾(单词是由空格分隔的字符/标点的序列)

[count] b:将光标移至上一个单词的开头(标点符号视为单个单词)

[count] B:将光标移至上一个单词的开头(单词是由空格分隔的字符/标点的序列)

0:将光标移至行首

^:将光标移动到该行的第一个非空白字符

[count] $:移至行尾或[count] -1行

[count] f {char}:将光标移到右侧第[count]个{char}

[count] F {char}:将光标移到左侧第{count}个第[count]次

[count] t {char}:将光标{char}的第[count]次出现之前向右移动一个空格

[count] T {char}:将{char}的第[count]次出现后向左移动光标一格

[count] ;:重复最后一个f / F / t / T命令

[count] ,:沿相反方向重复最后一个f / F / t / T命令

导航(围绕文档)

[count](:导航到上一个句子的开头(一个句子以'。','!'或'?'结尾,后跟一个空格或换行符)

[count]):导航到下一个句子的开头(一个句子以'。','!'或'?'结尾,后跟一个空格或换行符)

[count] {:将光标移到当前段落之前的空白行

[count]}:将光标移至下一段之前的空白行

[count] gg:导航到文档的第[count]行,默认情况下转到第一行

[count] G:导航到文档第[count]行上的第一个非空白字符,默认情况下转到最后一行的开头

[count] [{,[(,]),]}:转到上一个(或下一个)不匹配的'{'')',从但不包括当前光标位置开始

[count] |:将光标移动到当前行的第[count]列

导航(在窗口周围)

z:将光标线重画到:

  • zt:窗口顶部
  • zz:窗口中间
  • zb:窗口底部

[count] H:从窗口的第一行到第[count]行的第一个非空白字符,无需滚动屏幕

M:到窗口中线的第一个非空白字符

[count] L:从窗口的最后一行到第[count]行的第一个非空白字符

搜索

*:向前搜索当前行中最接近光标的单词的第[count]个出现。 搜索的单词是第一个

  • 光标下方的关键字(AZ,az,0–9,_,@)
  • 光标后的第一个关键字
  • 光标下的非空白单词
  • 光标后的第一个非空白单词

#:与*相同,但向后搜索

[count] / {pattern}:向前搜索图案,默认为最后一个图案

[count]?{pattern}:向后搜索图案,默认为最后一个图案

[count] n:重复最后一个“ /”或“?” 搜索

[count] N:重复最后一个“ /”或“?” 反向搜索

%:在该行上或此行之后找到下一个项目,然后跳转到其匹配项(包括([{{}])/ * * / #if #ifdef #else #elif #endif)

选拔

注意:节略,请参阅文本对象以获取更多详细信息

[count] aw:选择一个单词及其后的空白,除非光标位于一个单词前的空白中(然后包括之前的空白)

[count] aW:选择一个WORD及其后的空白,除非光标位于WORD之前的空白中(然后包括之前的空白)

[count] iw:选择一个单词(空格算作单词)

[count] iW:选择一个WORD(空格作为WORD计数)

[count] as:选择一个句子及其后的空白,除非光标位于该空白之前(然后包括之前的空白)

[count]是:选择一个句子(空格作为句子计数)

[count] ap:选择一个段落及其后的空白,除非光标位于该空白之前(然后包括之前的空白)

[count] ip:选择一个段落(空格算作段落)

删除中

[count] x:删除当前行中光标下方和之后的字符

[count] X:删除当前行中光标之前的字符

[count] r {char}:将光标下方的字符替换为{char}

d {motion}:删除{motion}移过的字符/单词

[count] dd:删除整行,无论光标在行中的位置如何

[count] D:删除光标下方的字符,直到该行的末尾,再增加[count] -1行

[count]〜:切换光标下方字符的大小写并将光标向右移动

:delm {args},:delmarks {args},:delm !,:delmarks !:删除指定的标记,包括az,AZ; 对于!,将删除所有现有的az标记

文字修改

[count] p:将来自指定寄存器的文本放在光标之后。 如果未指定寄存器,请使用未命名的寄存器(“),其中包含最后一个被删除,更改或删除的文本

[count] P:将来自指定寄存器的文本放在光标之前。 如果未指定寄存器,请使用未命名的寄存器(“),其中包含最后一个被删除,更改或删除的文本

[count] .:重复最后一次简单的更改,默认为最后一次更改的计数(如果最后一次更改包含编号的寄存器,则寄存器编号将递增)

插入模式命令

注意:Esc退出插入模式

[count] i {text}:在光标之前插入文本

[count] I {text}:在该行的第一个非空白字符之前插入文本

[count] a {text}:在光标后附加文本,如果光标在空行的第一列,则从此处开始插入

[count] A {text}:将文本附加到行尾

[register] c {motion}:删除运动

[register] [count] cc:将行删除到寄存器中并开始插入(逐行)

[register] [count] C:从光标位置删除到该行的末尾,再将[count] -1个行插入寄存器并开始插入

[register] [count] s:删除或替换字符到指定的寄存器中,然后开始插入(不是逐行),“ cl”的同义词

[register] [count] S:cc的同义词

[count] o {text}:在光标下方开始新行并插入文本

[count] O {text}:在光标上方换行并插入文本

扬京

[register] y {motion}:将{motion}文本插入寄存器,默认情况下存储在“ 0 register”中

[register] [count] yy:将行拖入寄存器,该行中的光标位置无关紧要

[register] [count] Y:yy的同义词

撤销重做

[count] CTRL + R,:redo:重做撤消的更改

[count] u,:undo:撤消更改

寄存器

:reg {arg}:显示{arg}指定的编号和命名寄存器的内容,或默认列出所有内容

文字对象

单词:由空格,空格,制表符,分隔的字母/数字/下划线或非空白字符序列,包括空行

WORD:一系列由空格(空格,制表符,)隔开的非空白字符,包括一个空行

句子:以“。”,“!”或“?”结尾的一系列单词 跟一个空格或换行符

段落:以换行符结尾的一系列句子

文本对象:操作后使用两个字符来指定操作范围。 第一个字符是“ a”(一个对象,包括空白)或“ i”(内部对象,没有空白或只有空白)。 第二个字符确定对象类型

  • w,W,s,p(单词,单词,句子,段落)
  • “,”,“(带引号的字符串)
  • {,},B({}块)
  • (,),b(()块)
  • [,]([]块)
  • <&#xff0c;>&#xff08;<>块&#xff09;
  • t&#xff08;HTML / XML标签块&#xff09;

有兴趣了解更多吗&#xff1f;

幸运的是&#xff0c;在线上有大量资源可以帮助您适应vi / vim环境。 这些站点的范围可帮助您记住基本的键绑定和快捷方式&#xff0c;以设置自己的宏并自定义工作环境。 您很快就会发现&#xff0c;vi / vim比简单的文本编辑器具有更多的实用性&#xff01;

  • Vim历险记
  • 打开Vim
  • Linux Vim指南

您觉得本指南有帮助吗&#xff1f; 如果是这样&#xff0c;给它“拍手”和分享&#xff01;

随时在网上其他地方找到我&#xff1a;

推特 &#64;sharontlin

脸书 &#64;sharonlinnyc

GitHub &#64; sharon-lin

From: https://hackernoon.com/a-glossary-of-vi-commands-e17cbc5b12f1



推荐阅读
  • xStream 1.4.14 升级至 1.4.16 后无法解析包含井号 (#) 的 Map 键值问题分析与解决 ... [详细]
  • Java服务问题快速定位与解决策略全面指南 ... [详细]
  • 如何利用Apache与Nginx高效实现动静态内容分离
    如何利用Apache与Nginx高效实现动静态内容分离 ... [详细]
  • 在Python 3环境中,当无法连接互联网时,可以通过下载离线模块包来实现模块的安装。具体步骤包括:首先从PyPI网站下载所需的模块包,然后将其传输到目标环境,并使用`pip install`命令进行本地安装。此方法不仅适用于单个模块,还支持依赖项的批量安装,确保开发环境的完整性和一致性。 ... [详细]
  • 在处理UVA11987问题时,关键在于实现并查集结构以支持删除操作。特别地,当需要删除某个节点时,如果该节点不是根节点,则处理相对简单;然而,若删除的是根节点,则需要进行额外的处理来维护集合的连通性。本文将详细介绍如何通过优化并查集算法,确保在删除根节点时仍能高效地维护数据结构的完整性和查询效率。 ... [详细]
  • 本文详细解析了JSONP(JSON with Padding)的跨域机制及其工作原理。JSONP是一种通过动态创建``标签来实现跨域请求的技术,其核心在于利用了浏览器对``标签的宽松同源策略。文章不仅介绍了JSONP的产生背景,还深入探讨了其具体实现过程,包括如何构造请求、服务器端如何响应以及客户端如何处理返回的数据。此外,还分析了JSONP的优势和局限性,帮助读者全面理解这一技术在现代Web开发中的应用。 ... [详细]
  • 如何在Oracle ASM_Diskgroup中重命名现有磁盘
    如何在Oracle ASM_Diskgroup中重命名现有磁盘 ... [详细]
  • BZOJ4240 Gym 102082G:贪心算法与树状数组的综合应用
    BZOJ4240 Gym 102082G 题目 "有趣的家庭菜园" 结合了贪心算法和树状数组的应用,旨在解决在有限时间和内存限制下高效处理复杂数据结构的问题。通过巧妙地运用贪心策略和树状数组,该题目能够在 10 秒的时间限制和 256MB 的内存限制内,有效处理大量输入数据,实现高性能的解决方案。提交次数为 756 次,成功解决次数为 349 次,体现了该题目的挑战性和实际应用价值。 ... [详细]
  • Spring Boot 实战(一):基础的CRUD操作详解
    在《Spring Boot 实战(一)》中,详细介绍了基础的CRUD操作,涵盖创建、读取、更新和删除等核心功能,适合初学者快速掌握Spring Boot框架的应用开发技巧。 ... [详细]
  • 本项目在Java Maven框架下,利用POI库实现了Excel数据的高效导入与导出功能。通过优化数据处理流程,提升了数据操作的性能和稳定性。项目已发布至GitHub,当前最新版本为0.0.5。该项目不仅适用于小型应用,也可扩展用于大型企业级系统,提供了灵活的数据管理解决方案。GitHub地址:https://github.com/83945105/holygrail,Maven坐标:`com.github.83945105:holygrail:0.0.5`。 ... [详细]
  • 本文深入探讨了 MXOTDLL.dll 在 C# 环境中的应用与优化策略。针对近期公司从某生物技术供应商采购的指纹识别设备,该设备提供的 DLL 文件是用 C 语言编写的。为了更好地集成到现有的 C# 系统中,我们对原生的 C 语言 DLL 进行了封装,并利用 C# 的互操作性功能实现了高效调用。此外,文章还详细分析了在实际应用中可能遇到的性能瓶颈,并提出了一系列优化措施,以确保系统的稳定性和高效运行。 ... [详细]
  • Python数据分析入门指南:全面了解Python在数据科学中的应用 ... [详细]
  • 在处理大规模并发请求时,传统的多线程或多进程模型往往无法有效解决性能瓶颈问题。尽管它们在处理小规模任务时能提升效率,但在高并发场景下,系统资源的过度消耗和上下文切换的开销会显著降低整体性能。相比之下,Python 的 `asyncio` 模块通过协程提供了一种轻量级且高效的并发解决方案。本文将深入解析 `asyncio` 模块的原理及其在实际应用中的优化技巧,帮助开发者更好地利用协程技术提升程序性能。 ... [详细]
  • 探索JavaScript倒计时功能的三种高效实现方法及代码示例 ... [详细]
  • 提升工作效率:掌握这些技巧,IDEA 使用效率翻倍 | IDEA 高效操作指南
    提升工作效率:掌握这些技巧,IDEA 使用效率翻倍 | IDEA 高效操作指南 ... [详细]
author-avatar
sddfdffwfefe_863
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有