vim的技巧 适合有一定vi功底的人使用 实例:
;:" 复制列
:%s [^ ] +$ && ;: 复制最后一列
:%s f +$ && ;: 复制最后一列
:%s S +$ && ;: 复制最后一列
;:" 记忆(反向引用)
:s : 2: 1 ;: 将两个字段颠倒
:%s ^ n 1$ 1 ;: 删除重复行
;:" 非贪婪匹配 { }
:%s ^ { }pdf new pdf ;: 删除第一个pdf
;:" use of optional atom
:%s# <[zy] tbl [a z ] + ># L&#gc ;: lowercase with optional leading characters
;:" 跨越尽量多的行
:%s < { } > ;: 删除多行注释
:help { } ;: 查看非贪婪匹配的更多帮助">vim的技巧 适合有一定vi功底的人使用 实例:
;:" 复制列
:%s [^ ] +$ && ;: 复制最后一列
:%s f +$ && ;: 复制最后一列
:%s S +$ && ;: 复制最后一列
;:" 记忆( [更多]
《vim技巧大全》这篇文章主要介绍了vim编辑器的一些高级使用技巧,这些技巧对于已经熟悉vi基础操作的用户来说非常实用。以下是一些关键知识点的详细解释:
1. **复制列**:
- `%s [^ ] +$ &&` 用于复制一列,它会删除每一行末尾的空格和非空字符。
- `%s f +$ &&` 复制最后一列,这里`f`表示查找空格,`+`表示一个或多个。
- `%s S +$ &&` 类似于上一个命令,但`S`匹配任意空白字符。
2. **记忆与反向引用**:
- `s : 2: 1` 在替换命令中使用反向引用,例如将两个字段的位置交换。
3. **非贪婪匹配**:
- `{ }` 可以用来限制匹配的范围,例如`%s ^ { }pdf new pdf` 删除第一个`pdf`。
4. **可选原子(optional atom)**:
- `%s# <[zy] tbl [a z ] + ># L&#gc` 用于处理带有可选前导字符的转换。
5. **跨越尽量多的行**:
- `%s < { } >` 用于删除多行注释,这里的`{ }`代表任何字符。
6. **帮助命令**:
- `:help { }` 可以查看vim的帮助文档,例如`:help non-greedy`获取关于非贪婪匹配的更多信息。
7. **搜索与导航**:
- `/joe/e`、`/joe/e+1`、`/joe/s-2` 和 `/joe/+3` 用于在文档中精确定位。
- `/^joe.*fred.*bill/` 匹配以`j`开头且包含`joe`、`fred`和`bill`的行。
- `/^[A-J]\+/` 查找行首不是'A'到'J'之一的重复行。
- `/begin\_.*end/` 多行匹配。
- `/fred\_s*joe/i` 匹配`fred`和`joe`之间的任意空白字符。
- `/fred\|joe/` 搜索`fred`或`joe`。
- `/.*fred\&.*joe/` 同时包含`fred`和`joe`的行。
- `/\<fred\>/i` 独立单词`fred`。
- `/\<\d\d\d\d\>/` 四位数字。
- `/\D\d\d\d\d\D/` 恰好四位数字,不包括全数字行。
- `/\<\d\{4}\>/` 同上。
- `/\([^0-9]\|^\)%.*%/` 查找非数字或行首的百分号包裹的内容。
- `/^\n\{3}/` 匹配连续三行空行。
8. **正则表达式组**:
- `\(fred\).*\(joe\).*\2.*\1` 查找`fred`和`joe`顺序出现两次的情况。
9. **visually模式下的键盘映射**:
- `:vmap // y/<C-R>"<CR>` 映射`//`为复制可视区域内的文本。
- `:vmap <silent> // y/<C-R>=escape(@",'\\/.*$^~[]')<CR><CR>` 复制可视区域文本,包括空白字符。
10. **特殊匹配**:
- `\zs` 和 `\ze` 用于匹配字符串的开始和结束位置。
- `\@=` 用于零宽度匹配。
- `\_{}` 包含换行符的多行匹配。
- `<!--\_p\{-}-->` 匹配HTML注释。
11. **函数声明查找**:
- `nmap gx yiw/^\(sub\<bar>function\)\s\+<C-R>"<CR>` 在normal模式下查找函数声明。
12. **跨文件搜索**:
- `bufdo /searchstr/` 在所有打开的文件中进行搜索。
这些技巧展示了vim的灵活性和强大功能,通过熟练掌握,可以极大地提高编辑效率。