菜鸟vimer成长记——第2.3章、insert模式

大部分的Vim 命令都在非插入模式中执行,不过有些功能在插入模式中会更好实现些。

如果没有输入当前文件不存在的新文本的需求时,建议通过其他模式来操作完成。

目的

  掌握inser模式下常用操作的语法和概念

光标移动

  移动光标的位置,这些操作和其他的编辑器基本一致。列几个常用的,其他的不一一列举。

  常用语法:

操作 用途
Ctrl+Left 向后移动一个单词
Ctrl+Right 向前移动一个单词
Home 移动到行首
End 移动到行尾
Ctrl+Home 移动到文件第一行
Ctrl+End 移动到文件最后一行
PageUp 向上一屏
PageDown 向下一屏

  详情查看:h ins-special-special

更正错误

  在输入的时候,难免会输错。怎么更快速的更正这些错误呢?

情景一:在输入时打错
    我们可以用退格键删除错误的文本,然后再输入正确的内容。如果出错的地方靠近单词结尾,这或许是最快的修正方式。

情景二:出错的位置在单词开头
    专业打字员会建议先删除整个单词,然后再重新输入一遍。如果你能以每分钟超过60 个单词的速度输入,那么重新输入一个词只需要1 秒钟的时间。即便你打不了这么快,最好也采用这种方式。我以前总是输错某些特定的词,但自从采纳这一建议后,我就更清楚地意识到哪些词会让我犯错,因此现在犯的错也少了很多。
    另外,你也可以切换到普通模式,然后跳到这个词的开头并更正错误,再按 A 返回刚才的位置。不过完成这一套动作要花的时间可能不止1 秒钟,并且它也无助于提高你的盲打技巧。虽然说我们可以切换模式,不过这并不意味着一定就得切换。

  所以删除错误并且重新输入是最佳方法。

  删除时有如下对应的快捷键操作:

操作 用途
Ctrl+h 删除前一个字符(同退格键)
Del 删除后一个字符。很少用
Ctrl+W 删除前一个单词
Ctrl+U 删除到行首

  注意事项:

  • 这几个删除在shell以及cmd-line一样可以使用。

插入现有文本

  如果是当前没有的文本,通过键盘录入即可插入到当前光标。如果是是当前现有的文本到,可以通过多种途径插入当前光标。

  这些途径如下:

上下行

  复制光标处在位置的上下行字符。每次操作一次复制一个字符。

  

  语法:

操作 用途
Ctrl+E 复制下一行光标位置的字符到当前光标
Ctrl+Y 复制上一行光标位置的字符到当前光标

上一次

  复制上一次进入insert模式插入的内容。

  语法:

操作 用途
Ctrl+A 复制上一次进入insert模式插入的内容。
Ctrl+o 复制上一次进入insert模式插入的内容,并且退到normal模式

寄存器

  复制寄存器里的内容。

  语法:CTRL-R {0-9a-z"%#*+:.-=}

  注意事项:

  • 查看所有寄存器的方法:reg
  • 在normal模式中使用put {0-9a-z"%#*+:.-=},可以实现黏贴。

  在本文顺便介绍一下寄存器的类型。请注意:下面寄存器的名称开头都会多加一个"(双引号)。详细查看:h registers

无名(unnamed)寄存器

  "",缓存最后一次操作内容;

数字(numbered)寄存器

  "0 ~ "9,缓存最近操作内容,复制与删除有别。

  • "0寄存器缓存最近一次复制的内容。
  • "1-"9缓存最近9次行删除内容

行内删除(small delete)寄存器

  "-,缓存行内删除内容

具名(named)寄存器

  "a ~ "z或"A - "0Z,指定时可用;

  定义一个具名寄存器的语法:在normal模式下"{name}y{motion}。这个输入可以注意右下角,会有对应的输入提示。

只读(read-only)寄存器

寄存器 代表的内容
": 最近cmd-line模式执行的命令
". 上次进入插入模式插入的文本
"% 当前文件名
"# 上一个轮换文件名。

表达式(expression)寄存器

  "=,只读,用于执行表达式命令;

  例如:

#假设我们刚输入完下列内容,我们想算一下总价然后再输入
6 chairs, each costing $35, totals $#只要输入<C-r>=6*35<CR>就可以得到结果

选择及拖拽(selection and drop)寄存器

  "*, "+, "~,存取GUI选择文本,可用于与外部应用交互,使用前提为系统剪切板(clipboard)可用;

  其他的命令只在vim里才有效。

黑洞(black hole)寄存器

  "_,不缓存操作内容(干净删除);

  删除文本却不想覆盖无名寄存器中的内容时,此命令很管用。

模式寄存器(last search pattern)

  "/,缓存最近的搜索模式。

自动提示

  语法:

命令 补全类型
<C-n> 普通关键字
<C-x><C-n> 当前缓冲区关键字
<C-x><C-i> 包含文件关键字
<C-x><C-]> 标签文件关键字。??这个暂时放到后面,可能单开一个文章来说明。
<C-x><C-k> 字典查找
<C-x><C-l> 整行补全
<C-x><C-f> 文件名补全
<C-x><C-o> 全能(Omni)补全
<C-x><C-s> 拼写建议
<C-x><C-v> vim命令
<C-x><C-d> 补全宏。??这个暂时没有找到对应的使用方式

  不论使用哪种自动补全命令,都会弹出式菜单。

  可供弹出式菜单使用的命令:

按键操作 作用
<C-n> 使用来自补全列表的下一个匹配项(next 匹配项
<C-p> 使用来自补全列表的上一个匹配项(previous 匹配项)
<Down> 选择来自补全列表的下一个匹配项
<Up> 选择来自补全列表的上一个匹配项
<C-y> 确认使用当前选中的匹配项(yes)
<C-e> 还原最早输入的文本(从自动补全中exit)
<C-h> (与<BS>) 从当前匹配项中删除一个字符
<C-l> 从当前匹配项中增加一个字符
{char} 中止自动补全并插入字符{char}

  还有一些使用技术如下

使用字典中的单词进行自动补全

  这个其实就是<C-X><C-K>

  有时候,我们可能想通过自动补全功能输入某个单词,但它并没有在任何打开的缓冲区、包含文件或者标签文件中出现过。在这种情况下,可以在字典中进行查找。

  为了激活该功能,我们需要为Vim 提供一份合适的单词列表。最简单的方法就是通过运行:set spell 来激活Vim 的拼写检查功能。

  如果你不想激活拼写检查功能,也可以通过 ‘dictionary’ 选项来指定一个或多个含有单词列表的文件(参见:h ‘dictionary‘ )。

  当你想输入一个长单词或者很难拼写的单词时,字典自动补全也许最管用了。这里有一个例子

  

自动补全文件名

  这个其实就是<C-X><C-F>

  Vim 总是维护着一个当前工作目录,这一做法与shell 类似。在任何给定的时间点,我们都可以通过:pwd 命令(print working directory)获取到该信息,还可以通过:cd{path} 命令(change directory)随时切换工作目录。另外,Vim 的文件名自动补全功能只相对于工作目录的路径进行扩展,而不是相对于当前编辑文件的路径,理解这一点很重要。

  如果补全的是非当前工作目录的文件,我们的操作有两种方式:

  1、写路径的根目录,然后不断的通过<C-X><C-F>来选择补全文件名。其实我比较喜欢这种方式

  2、先通过:cd{path}切换目录,然后<C-X><C-F>补全,然后通过:cd - 切回原来的目录。

根据上下文自动补全

  这个其实就是<C-X><C-O>

  全能补全是,它将提供一份为光标所处的上下文量身定做的补全建议列表.

  

  实际上,该功能由专用的文件类型插件实现,因此,我们必须先加载以下配置行:

set nocompatible
filetype plugin on

  Vim 的发行版本身就支持十几种语言,包括HTML、CSS、JavaScript、PHP 以及SQL。你可以通过:h compl-omni-filetypes 找到完整的列表

减少按键次数

  只要和其他的快捷操作没有冲突都可以把两个操作变为一个。

  建议设置如下:

  

缩进

  语法:

操作 用途
Ctrl+T 插入一个缩进
Ctrl+D 删除一个缩进
0(数字零)+Ctrl+D 删除当前行的所有缩进
^+Ctrl+D 删除当前行的所有缩进。和上面的区别暂时还没试出来??

缩写

  缩写可以用于insert和cmd-line模式。这些命令都差不多,只是通过前缀区别。单一个字符是i的表示适合于insert模式。如果是c的表示适合于cmd-line模式。如果没写的,表示两个都可以使用。

  下面仅列出都适用的列表,其他的大家对号入座

  其中{lhs}表示缩写的字符串。{rhs}表示真实的字符串,这里面支持map-<expr>,map-<buffer>

操作 用途
:ab {lhs} 查看缩写的列表。如果不写就是所有缩写列表;如果有写就是找到匹配的列表
:ab  {lhs} {rhs} 定义一个缩写
:una {lhs} 删除缩写列表。如果不写就是删除所有列表;如果有写就是删除匹配的列表

  使用缩写例子

#定义了一个:ab syso System.out.println();

#列举insert模式例子,cmd-line模式是一样的。${CURSOR}代表光标位置

#能生效的缩写。
"  syso{CURSOR}"     #注意,syso的前面有空白文本
#此时只要继续按一下非关键字符(tab键|空格键|Enter键|Esc键等)

#不能生效的缩写
" sysob{CURSOR}"
"testsyso{CURSOR}"

  所以,使用缩写的方法是:缩写必须是一个完整的独立的{rhs}输入。在{rhs}输入之前,前面需要有空白文本。在{rhs}输入之后不能再有任何其他的关键字符输入。

  还有一些其他的,可以细看:h Abbreviations :h map-<expr>,:h map-<buffer>

小技巧

  如果是通过cmd-line设置的缩写,关闭vim后就消除了。为了可以一直使用,可以写一个常用的缩写列表文件,然后放在vimrc文件中

#vimrc文件
source $VIMRUNTIME/my/ab.vim

insert normal 模式

  它能让我们执行一次普遍模式命令。在此模式中,我们可以执行一个普通模式命令,执行完后,马上就又返回到插入模式。

  语法:

  Ctrl+o

  例如: 

场景:在当前行正好处于窗口顶部或底部时,有时我会滚动一下屏幕,以便看到更多的上下文。
  用zz 命令可以重绘屏幕,并把当前行显示在窗口正中,这样就能够阅读当前行之上及之下的半屏内容。我常常会键入<C-o>zz,在插入-普通模式中触发这条命令。此操作完成后就会直接回到插入模式,因此我可以不受中断地继续打字。
时间: 2024-08-26 14:12:14

菜鸟vimer成长记——第2.3章、insert模式的相关文章

菜鸟vimer成长记——第2.0章、模式初探

首先,其他的文本编辑器只有一种模式,就是插入模式.而vim一下子颠覆了我们的世界观——有好多模式.这个是思维上的切换,很难也很重要!!! 其次,Vim 提供一个区分模式的用户界面.也就是说在不同的模式下相同的键位可能产生的结果不一样.好多快捷怎么记忆?记忆后过段时间不使用又还给vim了.这个是因为没有弄清楚职责和使用场景,没有构建成套的vim知识体系.而我们这里通过模式为载体来构建vim知识体系. 目的 介绍vim的常用模式职责及模式切换,减少由于不断思考和纠正什么场景用什么模式的什么操作而引起

菜鸟vimer成长记——第2.4章、cmd-line模式

cmd-line模式又有3个类型:Ex 命令(ex commands).查找模式(Search patterns).Filter 命令(Filter commands).本文主要重点的是Ex 命令和Search patterns.Filter 命令暂时用的场景比较少,如果有更适合的场景再补充. 目的 掌握cmd-line模式下常用操作的语法和概念 Ex 命令简介 初时,先有ed,ed为ex之父,ex为vi之父,而vi为vim之父.可见Ex 命令的重要性. 在Ex 命令影响范围广且距离远.对比no

菜鸟vimer成长记——第2.1章、normal模式

目的 掌握normal模式下常用操作的语法和概念,这些操作对应的应用场景以及实用技巧. 通过normal模式举一反三掌握cmd-line和visual的常用文本操作. 简介 文本操作的理想状态为:一个操作符+一个动作命令. normal.visual.cmd-line都具有操作文本的基本功能. normal 操作符+动作命令. visual  动作命令+操作符. cmd-line   匹配范围+操作符. 这三个在文本的基础操作时实现的功能是一样的.主要围绕着normal来讲,其他的举一反三即可.

菜鸟vimer成长记——第1.0章、统一概念

不管学什么技术,我都深信概念是最重要的.是影响整个学习轨迹,决定能在这个技术领域高度. 当然如果你现在的目的不是在学习而在于解决问题(很多人不愿意承认,或者没发现),那概念就暂时没那么重要了. 目的 弄清楚这些概念,有助于记忆,举一反三.重复的东西只学一次!! 用键盘不用鼠标 第一关是理解vim的设计思路,vim设计之初就是整个文本编辑都用键盘而非鼠标来完成,键盘上几乎每个键都有固定的用法. 具体有两个要注意的建议: 学会盲打 如果你要低头看着键盘打字,或者键位不熟悉,或者指法不舒服,那学习Vi

菜鸟vimer成长记——第0章、我眼中的vim学习

这是一系统总结vim的学习文章,记录我自己学习vim的过程和感悟.与此同时也想分享出来给大家,欢迎大家互相讨论和学习. 在这里假设你们对vim已经有了一些基本的认识或者说已经使用过几个月的vim.该系列文章里有些基础概念可能不会涉及到或者不会多做解释.一个是因为有些基础概念我目前也解释不清楚.越基础的解释起来越需要能力,目前鄙人还不具备.另一个是因为我相信各位大神们,你们已经有很好的搜索功能.当然有问题也欢迎大家互相讨论和学习. 这篇主要讲的是我当前对vim学习的理解.后面的一系列文章会针对于学

菜鸟vimer成长记——第3章、文件

上一章一直在讲的是vim的文本的操作,本章主要讲的是vim的文件操作. 本章的有些概念和传统的文本编辑器也不尽相同.所以需要注意概念或者切切说是思维习惯的区别. vim 允许在一个编辑会话中编辑多个文件,我们既可以每次显示一个文件,也可以把工作区分成若干个分割窗口或标签页,每个窗口或标签页包含一个独立的缓冲区. 概念 在开始学习之前,有必要先弄清楚几个重要的概念:文件.缓冲区.窗口.标签页.以及,他们之间的关系是什么 文件 这里的文件,指的是存储在磁盘上的文件.在工作过程中,我们通常会说“我们正

菜鸟成长记1,软件工程大一经历

菜鸟成长记1 -----大一总结及反思 大一即将结束,突然间想总结一下我的大一生活,最重要的还是好好反思一下. 回首整个大一感觉自己学了好多的东西,但最终的感觉还是一无所成,大一上学期学习c语言,一直处于一个总是一个没有入门的感觉,虽然简单的c经长期磨练已经差不多搞懂,不过稍微复杂点的抑或着说稍微麻烦点的都没有真正学会,仅仅是学过c而已,在学c的同时一直想练ACM可能真的是天赋不够也可能是自己不是这块料,在几经折磨下,做了uva上不超过30道题的情况下放弃了,除想练ACM这中间还接触了java和

蓝的成长记——追逐DBA(17):是分享,还是消费,在后IOE时代学会成长

原创作品,出自 "深蓝的blog" 博客,欢迎转载,转载时请务必注明出处,否则追究版权法律责任. 深蓝的blog:http://blog.csdn.net/huangyanlong/article/details/46456389 [简介] 个人在oracle路上的成长记录,其中以蓝自喻,分享成长中的情感.眼界与技术的变化与成长.敏感信息均以其它形式去掉,不会泄露任何企业机密,纯为技术分享. 创作灵感源于对自己的自省和记录.若能对刚刚起步的库友起到些许的帮助或共鸣,欣慰不已. 欢迎拍砖

蓝的成长记——追逐DBA(13):协调硬件厂商,六个故事:所见所感的“服务器、存储、交换机”

原创作品,出自 "深蓝的blog" 博客,欢迎转载,转载时请务必注明出处,否则追究版权法律责任. 深蓝的blog:http://blog.csdn.net/huangyanlong/article/details/43989939 [简介] 个人在oracle路上的成长记录,其中以蓝自喻,分享成长中的情感.眼界与技术的变化与成长.敏感信息均以英文形式代替,不会泄露任何企业机密,纯为技术分享. 创作灵感源于对自己的自省和记录.若能对刚刚起步的库友起到些许的帮助或共鸣,欣慰不已. 欢迎拍砖