Vim

1. 查找与替换

s 意为替换模式

命令模式为 :{范围标记}s{分隔符}{需要查找的内容}{分割符}{替换内容}{分隔符}{替换标记} ,

  • 范围标记,可选,默认为当前行, % 表示全文
  • 分隔符,一般为非字母数字的字符
  • 替换标记, g, golbal 在查询范围内全部替换

几个例子:

普通替换, 替换当前行的第一个 foo 为 bar :s/foo/bar 
替换当前行的所有 foo 为 bar :s/foo/bar/g 
替换全文的 foo 为 bar :%s/foo/bar/g
替换多行的 foo 为 bar,n1或n2留空代表 首行或尾行 :n1,n2s/foo/bar/g 

1.1 使用正则

在正规表达式中使用 ( 和 ) 符号括起正规表达式,即可在后面使用**\1**、\2 等变量来访问 ( 和 ) 中的内容。

Vim语法 Perl语法 含义
\+ + 1-任意个
\? ? 0-1个
\{n,m} {n,m} n-m个
\(和\) (和) 分组

2. 执行 Shell

在 :模式下,使用 !开启一个shell 命令,如 : !pwd 可以读取 shell 命令产生的数据,或直接从 vim 缓冲区生成命令:

  • 读取 shell 命令产生的数据,使用 read 指令,如::read !pwd
  • 从缓冲区输入 shell 命令,使用 write 指令,如 :write !sh,注意是执行缓冲区的每一行的内容

当给定一个范围给 shell 命令时,意思为:有 [range] 所指定的行会传给 cmd 作为标准输入,然后用 cmd 的标准输出替换 [range] 原本的行,下面是个例子,使用排序后的内容替换原来的内容 :2,$!sort -t',' -k2(使用每行的第二个关键字进行排序,排序后的内容替换原来的内容)

3. 多个文件

  • ls 列出打开的文件列表,% 代表当前窗口的文件
  • bnextbprev 当前窗口展示下/上一个文件的缓冲区
  • buffer N,使用 ls 输出的序号,直接跳转到某个编号的缓冲区
  • edit放弃更改,直接读取文件覆盖当前缓冲区

切分窗口

  • vsplit垂直切分,新窗口默认使用原来的缓冲区,加文件名,可以在新窗口打开文件
  • split水平切分,效果同上
  • C-w+hjkl,切换光标所在的窗口

4. 寄存器

使用双引号 " 选择一个寄存器,如 “a, “b, “c,寄存器名字需为为一个字符,有几个特殊寄存器:

  • +,为系统剪切板
  • 0,为复制专用寄存器