谈谈Vim中实用又好记的一些命令


本文的目的在于总结一些日常操作中比较实用、有规律的Vim命令,而不致于介绍一些基础的Vim知识,比如几种插入模式,hjkl移动命令,dd删除本行,p粘贴 等等,故对Vim基本知识不够熟悉的请参见其他教程。

另外,强烈给大家推荐一款强大的Vim插件集“spf13-vim”,这是一款Vim插件集,它把常用的一些Vim插件结合起来了,满足大部分人的需求,开箱即用,而不用自己一个一个的去配置Vim插件,处理各种按键冲突等等,免去你花大量的时间用于配置Vim软件本身(比如博主最初学习Vim的时候),而不是利用Vim来更好地解决问题。

最后,本博文会不定时更新。。。。


命令1:   [vydc] [ia] [pair_char]

上面命令指的是该命令由三部分组成,每部分可以是[ ]里面的任意一个字符

第一部分指定“操作类型”

第二部分和第三部分指定“操作范围”,是基于当前光标所在位置的,这个非常重要

(1)

v: visual select

y: copy

d: delete

c: change,和delete的区别在于它会先delete,然后进入"insert mode";等价于先 d 然后按下 i 进入"insert mode"

(2)

pair_char 可以是一些成对的字符,比如 {  [  (  <  "  ‘  也可以使用它们的对应right close版本,比如} ] 等等

pair_char 的特殊情况, 可以是w, 代表光标所在的单词(以空格分隔), 这时中间是使用i还是a, 区别在于操作结果包不包括单词右边的空格

(3)

i: exclude the pair_char

a: include the pair_char

i 和 a 的区别在于指定的“操作范围”包不包括由pair_char指定的这一对字符,即 {} 或 [] 或 () 或 "" 等等

举个例子吧:

假设有一文本行为  abcd "fgh ijk <lmn>";

光标位于m处(下划线处)

vi< 作用:选中了 lmn

ya" 作用:复制了 "fgh ijk <lmn>"

di"  作用:删除了 fgh ijk <lmn>

ci<  作用: 删除了 lmn 并且进入了"insert mode",光标位于<>中间


命令2:   [vydc] [tf] [a_char]

(1)

参见命令1的(1)

(2)

t: till, exclude the character ‘a_char‘

f: find, include the character ‘a_char‘

t和f 代表从左往右

另外,还可以使用大写的T和F,代表从右往左

(3)

a_char: 代表某一个字符,特殊情况是0和$, 代表行首和行尾


命令3:   大小写转换 gU, gu

(1)

[visual_select_something_by_someway]gU

[visual_select_something_by_someway]gU

先通过某种方式选择某个范围的内容(可以通过命令1,2中的v指令进行选择),然后将其转换成大写或小写

(2)

gU [ia] [pair_char]

gu [ia] [pair_char]

gU [tf] [a_char]

gu [tf] [a_char]

这种方式是先通过gU指定要转换成大写,然后通过后两部分指定“操作范围”

[ia] [pair_char]  参见命令1的解释

这里中间部分使用 i 或 a 好像是没有什么区别

[tf] [a_char] 参见命令2的解释


命令4:   宏命令

录制命令  qa [do_some_routine_job_in_this_line_and_move_to_next_line] q

执行上一步录制的命令 [n]@a

qa中的a代表将录制的命令放置于哪个寄存器中,对应于[n]@a 中的a。所以,a也可以换成b,c,d...

[n]@a中的n代表执行该录制命令的次数,省略n即执行1次

宏命令非常适合执行一些针对每一行都执行有规律的的操作,重点在于,首先,按下qa进入录制模式,然后在第一行针对该行进行有规律的操作,最终移到下一行,按下a退出录制模式,使用[n]@a对余下的所有行进行批量处理

例子:

假设有如下的文本行,每一行代表一个用户名,现在需要对该用户名进行密码重置为123456,简单起见,假设只有5行:

user1
user2
user3
user4
user5

光标置于第一行某个位置处,在“Normal mode” 模式下按顺序按 qaIalter user_table set password=‘123456‘ where username=‘<Esc>A‘;<Esc>ja

好了,录制命令完毕,执行命令[email protected],即把剩下的4行处理为与第一行相同的结果了

执行结果如下:

alter user_table set password=‘123456‘ where username=‘user1‘;
alter user_table set password=‘123456‘ where username=‘user2‘;
alter user_table set password=‘123456‘ where username=‘user3‘;
alter user_table set password=‘123456‘ where username=‘user4‘;
alter user_table set password=‘123456‘ where username=‘user5‘;

命令5:   代码自动缩进 =

(1) 光标移到某个位置,然后,使用 vi{  选择要自动缩排的代码块{ code },最后,按=

(2) 按下大写V进入行选择模式,使用 jk 上下移动选择要自动缩排的行集, 最后,按 =

(3) 最懒的方式, gg到第一行, VG 选择该文件所有行,最后,按 =,格式化所有代码


命令6: 倒置文本  :g/^/m0

让第一行成为最后一行,第二行成为倒数第二行,最后一行成为第一行。


原创文章,转载请注明出处:http://www.cnblogs.com/DayByDay/p/3921799.html

谈谈Vim中实用又好记的一些命令

时间: 2024-10-11 08:00:48

谈谈Vim中实用又好记的一些命令的相关文章

Vim 中截取部分内容保存到其他文件

最近无聊,突然想跟着玩玩天池数据挖掘,发现数据好大,想转换到mysql数据库,phpmyadmin import 导入时抱错! 数据文件大大! 于是乎,准备截取一小段到另外一个文件测试先,然后,发现了一个vim中一个很好用的命令: 1. vim 打开data.csv文件,按esc,切换到命令模式,截取第2到200行到新文件data_copy.csv中: : 2, 200 w ./data_copy.csv 2. 追加到原有文件中命令:加上 “>>” 表示追加而不覆盖! :201,380 w &

【开发工具】vim编辑器实用技巧总结

总结一些我们在平时使用vim编辑器的一些实用功能,后续会一直更新. 1.  visual插件 visual插件其实相当于一个书签作用,比如我们在一篇很长的源代码文件中,我们可以标记一行,然后后来我们再想回到这一行时,只需要一个快捷键就能迅速定位到这一行,非常方便,不用不停地往上或往下翻. 1.1  常用命令 1.  mm标记一个标签: 2.  F2回到被标记的那一行: 3.  连续按两次mm就可以取消标签: 4.  shift+F2可以在几个标签来回切换: 2.  emmet.vim插件 emm

针对高级用户的 Vim 编辑实用技巧

导读 毫无疑问, Vim 是一个很强大的文本编辑器.它提供了大量的特性,这意味着学习并记住 Vim 的所有功能实际上是不可能的.但是我们至少可以不断学习简单的方法来完成事情,从而随着时间的增长,我们使用编辑器的经验将会变得更好. 这篇文章是 Vim 用户指南系列文章中的一篇: Vim 初学者入门指南 Vim 快捷键速查表 5 个针对有经验用户的 Vim 技巧 3 个针对高级用户的 Vim 编辑器实用技巧 请记住,在这篇文章中我们将讨论的一些 Vim 编辑器技巧是针对高级用户的.注:如果你是第一次

vim中使用正則表達式

一.使用正則表達式的命令 使用正則表達式的命令最常见的就是 / (搜索)命令. 其格式例如以下: /正則表達式 还有一个非常实用的命令就是 :s(替换)命令,将第一个//之间的正則表達式替换成第二个//之间的字符串. :s/正則表達式/替换字符串/选项 在学习正則表達式时能够利用 / 命令来练习. 二.元字符 元字符是具有特殊意义的字符.使用元字符能够表达随意字符.行首.行 尾.某几个字符等意义. 元字符一览 元字符 说明 . 匹配随意一个字符 [abc] 匹配方括号里的随意一个字符. 能够使用

Vim/Vi实用技巧(第二版)

Vim/Vi实用技巧 1.导入文件 :r [文件名] #导入到当前编辑的文件中 如 :r /etc/inittab 文件上部为/etc/services文件,下部为/etc/inittab文件 2.执行命令[不用退出vi] :! [命令] :! ls -l /home/hadoop 拓展-把命令执行的结果,导入到当前编辑的文件中! :r !date 3.定义快捷键 :map [快捷键] [触发指令] e.g. :map ^P I#<ESC> #Ctrl+v Ctrl+p 或者 Ctrl+v+p

【Vim】实用命令行

在vim中高亮关键字 syntax enable 可以高亮关键字:一般后面还要在跟一个syntax on打开语法高亮 syntax clear 清除关键字高亮 在secureCRT不是xterminal模式的时候,试了一下,没起作用啊,如果是xterminal模式的时候是会起作用的 在vim中查找 / 后面跟要查找的字符串:从当前光标位置向上搜索 ? 后面跟要查找的字符串:从当前光标位置向下搜索 n 找下一个 N 找上一个 清除并重画屏幕 [Ctrl+l]组合键 vim快捷键定制 对于键盘符号,

VIM中的寄存器简介

原来在vim粘贴从其他地方复制过来的文本的时候,一直用的shift + inert,那时就想,能不能够直接就像p那样粘贴,不必非得进入插入模式再来粘贴.后来看了<vim实用技巧>上关于vim寄存器的介绍,发现这里面大有文章,所以今天特意拿来和大家分享. 首先对vim中的寄存器来进行个大致浏览,它主要分为这么几个部分: 1.无名寄存器(" ) 2.复制专用寄存器 (0) 3.系统剪贴板(X11视窗系统下的主剪贴板)(*) 4.黑洞寄存器 (_) 5.命名寄存器 (a-z) 6.表达式寄

[原]总结VIM的实用技巧

VIM真是一个神奇而又复杂的编辑器,让我这样的Linux编程新手茫然不已啊.每次到真正动手编程的时候才发现完全不知道该怎么操作VIM,一点都没感觉到VIM的强大,哈哈--正好今天学习了一点VIM操作技巧,顺便记下来,一边日后不断积累不断提高. 一.复制.剪切.粘贴 (1)在命令模式下将光标移动到要复制的段开始位置,按下字母v进入可视模式,然后移动光标覆盖需要复制的内容,按下y完成复制,按下d完成剪切.再将光标移动到目标位置,按下字母p完成粘贴. (2)在命令模式下,在目标行按下两次字母y,即yy

在 Vim 中设置 Tab 为4个空格

缩进用 tab 制表符还是空格,这不是个问题,就像 python 用四个空格来缩进一样,这是要看个人喜好的.在 Vim 中可以很方便的根据不同的文件类型来设置使用 tab 制表符或者空格,还可以设置长度,非常灵活. 首先来看如何设定 tab 的宽度以及如何确定用 tab 制表符还是空格来表示一个缩进: set tabstop=4 set softtabstop=4 set shiftwidth=4 set noexpandtab / expandtab 说明: 其中 tabstop 表示一个 t