注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
lcofjp的个人空间 https://home.eeworld.com.cn/space-uid-367757.html [收藏] [复制] [分享] [RSS]
日志

vim学习笔记

已有 638 次阅读2016-1-7 10:39 |个人分类:linux/unix| 下一步, 无底洞, 表达式, 技巧, 知识

原帖地址:http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=4155862&page=11#pid24300490
最近在学Vim实用技巧一书,整理了一份笔记。
《Vim实用技巧》一书确实是一本好书,让我从对vim的生疏不喜欢用转为对vim的着迷并有相见恨晚的感觉。vim功能强大的让人受不鸟,我觉得掌握vim的5成功力便能称为武林中的高手了,自测我目前掌握的有2成功力就已经很得心应手了!!vim的知识像是个无底洞,要想到熟练和精通的火候,我估计没个一年半载的修炼很难达到。所以就目前可以应付大多数编辑任务的情况下,我打算开始往下一步进行,学习一些重点有难度的命令,egrep以及正则表达式等。vim的学习也会在日常应用中进一步加深!
以后的学习路线打算是:正则表达式->GNU 编译器的使用(GCC,GDB,makefile)->linux/unix编程->linux内核学习。
——————————————————————————————————————————————————————————————————————————————
vi编辑器学习笔记
每个模式的所有命令列表,请参见:h index
说明:形如<C-a>这样的标记代表CTRL+a
1. 普通模式下操作:操作符+动作命令=操作(:help operator)(查看所有命令列表:help normal-index)
   #每个命令前均可指定一个数字[count], 不指定[count]的话,[count]默认值为1.
   ["x]c{motion} 删除{motion}指定的文本[到寄存器x中]并进入插入模式. (cc 删除[count]行[到寄存器x中]并进入插入模式)(change)
   ["x]C 删除光标到行尾的内容以及下面的[count-1]行[到寄存器x中],并进入插入模式.(C=c$)
   ["x]d{motion} [执行count次]删除{motion}指定的文本[到寄存器x中].(dd 删除[count]行[到寄存器x中])(delete)
   ["x]D 删除光标到行尾的内容[到寄存器x中]. (D=d$)
   ["x]y{motion} Yank {motion} text [into register x]. (yy Yank [count] lines [into register x]).
   ["x]Y 复制光标处到行尾的文本以及下面的[count-1]行[到寄存器x中]. (Y=y$)
   ["x]s 删除[count]个字符[到寄存器x中]并进入插入模式(s stands for Substitute). (s=cl)
   ["x]S 删除[count]行并进入插入模式.(S=cc)
   ["x]x 删除光标下以及后面的[count]个字符[到寄存器x中]. (x=dl) (xp 可实现两个字符的位置交换)
   ["x]X 删除光标前面的[count]个字符[到寄存器x中]. (X=dh)
   ["x]p 粘贴[寄存器x中的]文本到光标后面[count]次.(put)
   ["x]P 粘贴[寄存器x中的]文本到光标前面[count]次.
   r{char} 用{char}字符替换光标所在处的字符,如果指定[count]的话,则用{char}替换光标及其后面[count-1]个字符.(replace)
   g~{motion} 反转{motion}指定文本的大小写. (g~~或g~g~,反转当前行文本的大小写)
   gu{motion} 使{motion}指定的文本转为小写. (guu或gugu,使当前行的文本变为小写)
   gU{motion} 使{motion}指定的文本转为大写. (guu或gugu,使当前行的文本变为大写) 
   >{motion} 对{motion}区域增加缩进(shiftwidth指定的单位). (>>对[count]行增加缩进)
   <{motion} 对{motion}区域减少缩进(shiftwidth指定的单位). (>>对[count]行减少缩进)
   ={motion} 对{motion}区域自动缩进. (==对[count]行进行自动缩进)
2. 普通模式下的其他操作:
   J 连接[count]行成为1行(删除行尾的换行符)
   R 进入改写模式. 直到按ESC退出replace模式,输入的内容会被重复[count]次.
   u 撤销[count]次改变(undo)
   U 撤销对本行的修改
   <C-r> 重做(redo) (与u相对)
   . 重复上一次操作,如插入、删除、修改操作。
   #数字运算操作,适用与整数,如果是小数的话,会当做两个整数处理。
   <C-a> 如果不指定[count],则对光标处(或者光标后面第一个)数字+1,否则+count
   <C-x> 如果不指定[count],则对光标处(或者光标后面第一个)数字-1,否则-count
   {num}<Enter> 光标下移num行
3. {motion}:普通模式下移动光标命令
   h,j,k,l 左,下,上,右(实际行)
   gh, gj, gk, gl 左下上右 (屏幕行)
   0, ^, $ 行首,第一个非空白字符, 行尾(实际行)
   g0, g^, g$ 行首,第一个非空白字符,行尾(屏幕行)
   w 向前(右)移动一词(计标点),W 向前移动一词(不计标点)
   b 向后(左)移动一词(计标点),B 向后移动一词(不计标点)
   e 移到(下一个)单词的结尾, E 移到(下一个)串的结尾
   ge 移到(上一个)单词的结尾,gE 移到(上一个)串的结尾
   t{char} 向右查找直到遇到{char}字符前停下(不包含{char}字符)
   T{char} 向左查找直到遇到{char}字符前停下(不包含{char}字符)
   f{char} 从光标处开始向行尾查找{char}字符(在选择时包括char字符)
   F{char} 从光标前开始向行首查找{char}字符(在选择时包括char字符) 
   ; 重复上次的字符查找命令(f/F命令)
   , 反向查找上次的字符查找命令(f/F命令)。
   % 跳到匹配的括号处
   * 查找光标下的单词,并跳到下一个匹配处,可按n或者N进行重复查找。
   H 把光标移至编辑窗口顶部第一行的第一个非空白字符位置
   M 把光标移至编辑窗口中间一行的第一个非空白字符位置
   L 把光标移至编辑窗口底部最后一行的第一个非空白字符位置。
   ( 把光标移至一个完整句子的句首位置
   ) 把光标移至一个完整句子的句尾位置
   { 把光标移至一个完整段落的段首位置
   } 把光标移至一个完整段落的段尾位置
   + 到下一行首字符
   - 到上一行首字符 
   /正向查找,?反向查找,n查找下一个匹配,N查找上一个匹配。
4. {motion}:文本对象(:help objects)
   i“, i), i}, i], i’, i>, i` 括号或者引号内部的对象(不好含括号或者引号)
   a”, a), a}…                      包括括号或者引号的对象
   it, at, XML标签对象
   iw, iW, is, ip 单词、字串、句子、段落对象
   aw, aW, as, ap i对应对象及一个空格(空行)
5. 插入文本的常用方法(进入插入模式)(在结束插入时,插入的内容将重复[count]次)
    a 在光标后面插入文本.
    A 在当前行的尾部添加文本
    i 在光标处插入文本.(如果想插入50个'-',则可以输入50i-<ESC>
    I 在行首插入文本
    o 在光标所在行的下面新建一行,等待输入文本
    O 在光标所在行的上面新建一行,等待输入文本
6. 插入模式:(:help Insert) (:help insert-index)
   <C-h> 删除前一个字符(同backspace)
   <C-w> 删除前一个单词
   <C-u> 删至行首
   以上命令,在Bash shell中或者Ex命令模式下也可以使用.
   —————
   <Esc> 或 <C-[> 返回到普通模式
   <C-o> 切换到插入-普通模式; 切换到此模式后,执行一条普通模式指令后,便再次返回到插入模式
   —————
   <C-r>{0-9a-z"%#*+:.-=} 把寄存器的内容粘贴到当前位置。
   <C-r><C-p>{register} 按原意插入寄存器内的文本,并修正不必要的缩进。
   <C-v>{code} 其中code为3位十进制数字,如<C-v>065输入A字符
   <C-v>u{1234} 其中u后面跟4位16进制数字,用来输入unicode码
   <C-v>{nondigit} 后面跟非数字字符,则按原意插入该字符
   <C-k>{char1}{char2} 插入以二合字母{char1}{char2}表示的字符
   <C-e> 插入光标下面(下一行)的字符
   <C-y> 插入光标上面(上一行)的字符

7. 常用Ex命令(获取Ex命令列表:help ex-cmd-index,获取某个命令的帮助,如:help :delete)
   #在Ex模式下,可以用<C-w>,<C-u>来删除,可以用<C-v>,<C-k>来输入,也可以用<C-r>{register}粘贴寄存中的内容
   #range范围中的特殊字符:.当前行, $最后一行, %所有行(=1,$), '<,'>代表高亮选取, 0位于文件第一行上方
   #range可以是一个数字代表一行,如1,也可以是一个范围,如 2,8 代表2到8行,可以使用特殊符号和偏移,例如.,.+4代表当前行以及下面4行。还可以使用模式指定地址范围。
   #重复上次的Ex命令@:
   #在Ex模式下,<Tab>可以补全命令,也可以输入<C-d>显示可用的补全列表
   #<C-w>输入光标下单词,<C-a>输入光标下的字串
   :reg[isters] 显示寄存器的内容
   :{num} 跳到第num行
   :[range]d[elete] [x] 删除指定范围内的行[到寄存器x中]
   :[range]y[ank] [x] 复制指定范围的行[到寄存器x中]
   :[line]pu[t] [x] 在指定行后粘贴寄存器x中的内容
   :[range]co[py] {address} 把指定范围内的行拷贝到{address}所指定的行之下(可以简写为:t)
   :[range]m[ove] {address} 把指定范围内的行移动到{address}所指定的行之下
   :[range]j[oin] 连接指定范围内的行
   :[range]norm[al] {commands} 对指定范围内的每一行执行普通模式命令{commands}
   :[range]s[ubstitute]/{pattern}/{string}/[flags] 把指定范围内出现{pattern}的地方替换为{string}
   :[range]g[lobal]/{pattern}/[cmd] 对指定范围内匹配{pattern}的所有行,在其上执行Ex命令{cmd}, (default cmd is ":p"

8. 寄存器(:help registers)
   #共有9类寄存器,包括
   (1)"" 无名寄存器(类似于最后一个使用过的寄存器),d,c,s,x,y等命令都会使用无名寄存器,即使指定了其他寄存器("_除外)。
   (2)"0-"9 10个数字命名寄存器
        "0 每次一执行y命令,总是会保存内容到寄存器0,无论是否指定其他寄存器。
          "1 除了指定其他寄存器或者删除修改的内容小于一行外,d和c命令将复制内容到寄存器1。(但是d与%()`/?nN{}组合除外).
        "2-"9 每一次发生删除或者修改动作,寄存器的内容就会发生移位,寄存器1的内容到寄存器2中,寄存器2的内容到寄存器3中,以此类推。        
   (3)"- the small delete register (delete命令操作小于一行时如果未指定其他寄存器,则会保存到此寄存器)
   (4)"a-"z和"A-"Z 26个字母命名的寄存器。仅在指定这些寄存器的时候才会使用,使用小写字母寄存器会覆盖原有内容,大写字母寄存器会附加到原有内容后面。
   (5)":, "., "%, "# 4个只读寄存器
        ": 上次执行的Ex命令
        ". 最后插入的文本
        "% 当前文件的文件名
        "# contains the name of the alternate file.
   (6)"= 表达式寄存器,可再后面输入表达式,将会插入表达式的结果.
   (7)"*, "+, "~ Selection and drop registers (本人测试mac下无,也可能是方法不对)
           "* X11主剪切板,用鼠标中键操作
           "+ X11主剪切板,用剪切、复制与粘贴命令操作
   (8)"_ 黑洞寄存器,使用这个寄存器可以实现删除内容但不影响任何寄存器。
   (9)"/ 上次的搜索模式

9. 可视模式:在可视模式下,可通过{motion}移动光标进行选择。
   v 面向字符的可视模式
   V 面向行的可视模式
   <C-v> 面向块的可视模式
   gv 重选上次的高亮区域
   <ESC> 或者 <C-[> 退出可视模式到普通模式
   o 切换高亮选区的活动端。

10. 滚屏操作(:help scrolling)
   zz 把当前行显示在窗口正中
   <C-f> 向下移动一屏 [PageDown]
   <C-b> 向上移动一屏 [PageUp]
   <C-d> 向下移动半屏
   <C-u> 向上移动半屏
   <C-e> 下移[count]行
   <C-y> 上移[count]行
评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

热门文章