VIM笔记(二)
2023年06月04日 16:19

第四章节(usr_04.txt)

复制文本

"*yy:将当前行的内容复制到剪贴板

"*p:将剪贴板的内容粘贴到当前光标所在位置

跳转

:jumps 查看可以跳转的位置,

ctrl+O:跳转到上一次位置,

Tab或ctrl+I:下向跳转

文本对象

:重点在于ai的不同

dw:删除一个单词,从光标所在位置到单词的结尾

daw:删除一个单词文本,只要光标在单词上,就会删除这个单词;delete a word,向前会删除到前一个单词的结尾处,向后会删除到这个下一下单词的开始处;

diw:删除一个单词文本,只删除一个单词,不包含其它字符

3daw:执行3次删除一个单词

d3aw:删除3个单词

dis:删除一个句子,直接到句子结尾

das:删除一个句子,直接到下一个句子的开头

vis或vas:可以很好的查看到效果

总结

~:将一个字符变成大写

usr07-编辑更多的文件

编辑其它文件

:edit other.file:打开其它文件

:next :下一个文件

:next!:不保存当前文件,强制进入下一个文件

:wnext:保存当前文件并打开下一个文件

:args:显示当前编辑的文件名

:args file1 file2 :重新定义顺序

:previous:前一个文件

:last:最后一个文件

:first:第一个文件

vim -R 文件名:以只读的方式打开一个文件

:saveas 文件名:另存为一个文件

usr08-切割窗口

:split:水平切割窗口

:new:水平新建窗口

:colse:关闭当前窗口

:only:只保留当前窗口,关闭其它窗口

:3split 文件名:水平切割文件并显示3行内容

ctrl+w +:调整窗口大小(增加一行)

ctrl+w -:调整窗口大小(减小一行)

{height} ctrl+w _:设置窗口大小为height

:vsplit:垂直切割窗口

:vertical new:垂直新建窗口

ctrl+W H:移动窗口到左边

ctrl+w J:移动窗口到底部

ctrl+w L:移动窗口到右边

ctrl+ K:移动窗口到上面

:qall:退出所有窗口

:wall:保存所有窗口中的内容

:wqall:保存所有窗口中的内容并退出

:qall!:强制退出窗口

usr10-Making big changes

记录和重放命令

使用q{register} 命令来开始记录命令,注册器为a-z;然后输入命令,以q来进行结束记录;使用@{register}来调用命令;

如:qa ^ i#include " <ESC> $" <ESC> j q 3@a

.:重复先前的更改(repeat the preceding change ),最后一次更改

@@:重复上一次执行的记录命令。

q{upper reister}:追加到某个寄存器中,寄存器大写为追加命令

替换(substitution)

格式::[rangs]substitute/ffrom/to/[flags]

注: substitute命令可以简写为s

%:所有的行

:s:当前行

范围取值(flags):

  • g匹配所有
  • c是否进行确认
  • p打印

命令范围(Command ranges)

  • 简单的范围:{number}, {number},如:1,5s/this/that/g
  • 指定的行范围::54s/Persident/Fool
  • 当前行::.writer otherfile 将当前行写一个文件中
  • 当前行到结束::.,$s/yes/no
  • 所有行:%相当于:1,$

使用匹配模式作为范围

  • :?^Chapter?,/^Chapter/s=grey=gray=g:以当前行为准向后查找?^Chapter?,到向前查询/^Chapter/的范围进行替换将grey替换为gray。其中=为替换的分隔符

添加和减少范围

  • /Chapter/-1:使用搜索模式,对匹配行的上一行进行更改
  • /Chapter/+2:使用搜索模式,对匹配行的下两行进行更改
  • .+3,$-5:从当前行的下3行开始,到最后的前5行结束

使用标记

使用mt来标记产行,使用mb来标记底部

  • :'t, 'b

**使用视图和范围(Visual mode and ranges) **

使用视图进行文本的选择,然后输入: ,然后你就会看到 :'<,'>,你就可以在这个范围进行替换了,其中'>标记了视图的起始位置,'< 标记了视图的结尾处,

多行(a number of lines)

  • :.,+4:当前行向下4行,一共五行的内容进行匹配

全局命令(The global command)

格式:[range]global/{pattern}{command}其中global可以简写为g;与:s不同的是:g是在没有范围的一行上工作。(This is different from ":s", which works on one line without a range. )

  • :g+//+s/foobar/barfoo/g:全部替换,将以//开头的行中的foobar替换为barfoo

块视图模式

ctrl+V:进行视图模式

插入文本

I:在当前字母前进行插入

A:在当前字母后进行插入

更改文本

c:删除一个字符然后进行插入模式

C:从当前光标删除到结尾,然后进行插入模式

~:转换大小写

U:转换为大写

u:转换为小写

替换字符

r:替换单个字符

缩进

>:向左缩进

<:向右缩进

合并行

J:合并行

读取和写入部分到文件中

读取部分到文件中

:read file1:读取file1的内容到当前文件中,

:$r file1:将file1中的最后一行读取到当前文件中

:n,nr file1:范围的读取file1到当前文件中

写入部分到文件中

:.,$write file2:从光标当前行到最结尾写到file2中

:.,$write! file2:强制写入到file2中,如果file2文件存在的话

追加到某个文件中

:.write >> file3:将当前行追加到file3文件中

格式化文本(Formatting Text)

:set textwidth=72 设置文本宽度为72

gqap:格式化一个段落,gq为操作符,ap为一段落

gqG:从当前行到结尾进行格式化

转换大小写(Changing case)

gUw:将一个单词转换为大写

guw:将一个单词转换为小写

g~:将大写转换为小写,小写转换为大写

gugu或guu:将当前行转换为小写

gUgU或gUU:将当前行转换为大写

g~~:将当前中的大写转换为小写,小写转换为大写

使用外部程序(Using an external program)

格式:!{motion}{program},其中!是告诉vim启动过滤操作,{motion}:文本的范围,{program}:需要执行的外部命令

!5Gsort:对光标所在行到光标以下4行进行排序操作

!!date:将当前的内容替换为date命令执行的结果

读取命令输出

:r!ls: 读取ls内容,写到第当前行

:0r date -u:将date -u的内容写入到第1行

写出一个命令的结果

:w !wc

重绘屏幕

ctrl+L

usr11-从崩溃中恢复

基础恢复

swap文件在那?

Carsh or not?

延伸阅读