上下最大最小:
9. 使窗口最小化:(ctrl + w) 1_
10. 使窗口最大化:(crtl + w) _
左右最大最小:
11. 使窗口向左最小化:(crtl +w ) 1|
12. 使窗口向右最大化:(crtl + w) |
set tabstop=4 set softtabstop=4 set shiftwidth=4 set expandtab set cindent set autoindent set smartindent
但有的时候,还是不对齐
在Vim中,有时需要将tab转换成space。使用ret命令(replace tab)。
[range]ret[ab]! [new-tabstop]
举例:将第一行到文件尾的tab转换成space,每个tab用4个space替代。
:set expandtab
:%ret! 4
对于已保存的文件,可以使用下面的方法进行空格和TAB的替换:
TAB替换为空格:
:set ts=4
:set expandtab
:%retab!
空格替换为TAB:
:set ts=4
:set noexpandtab
:%retab!
加!是用于处理非空白字符之后的TAB,即所有的TAB,若不加!,则只处理行首的TAB。
\v
activates very magic parsing mode, 这样在使用正则表达式的时候就不需要写一堆反斜杠了\
- 排序
假设有如下数据,以空格为数据列分割:
1、打开一个文件,在该文件下复制几行到另一个文件(如到test.txt),会覆盖test.txt中的内容
10,100w!test.txt, 注:复制第10行到100行的内容到test.txt中,并覆盖test.txt中的内容
2、在该文件下复制几行到另一个文件,但不会覆盖原内容,即追加
10,100w!>>test.txt, 注:复制10行到100行的内容追加到test.txt的结尾。
将文中所有的字符串idiots替换成managers:
:1,$s/idiots/manages/g
通常我们会在命令中使用%指代整个文件做为替换范围:
:%s/search/replace/g
以下命令指定只在第5至第15行间进行替换:
:5,15s/dog/cat/g
以下命令指定只在当前行至文件结尾间进行替换:
:.,$s/dog/cat/g
以下命令指定只在后续9行内进行替换:
:.,.+8s/dog/cat/g
你还可以将特定字符做为替换范围。比如,将SQL语句从FROM至分号部分中的所有等号(=)替换为不等号(<>):
:/FROM/,/;/s/=/<>/g
删除空格行: :g/^$/d
删除行首空格::%s/^\s*//g
删除行尾空格::%s/\s*$//g
1.统计字段
先来统计某个字段出现的次数,比如要统计vim,就是::%s/vim//gn
然后命令行就会显示vim匹配的次数和匹配的行数了。。。(=0=)/
好,解释一下:
%s
全文匹配g
匹配行内所有n
只显示匹配数,不真正地匹配
对了,关键就在与参数n
了,哟!!
2.统计更多
好,来用s的匹配模式统计更多:
- 统计字符数
:%s/.//gn
(. 指代字符) - 统计单词数
:%s/i+//gn
(i指代英文字母,i+就是一个或连续多个英文字母,所以就是单词了) - 统计行数
:%s/^//gn
(^指代每行第一个非空字符) - 精确匹配单词(如vim)
:%s/<vim>//gn
(指代单词的开始,指代单词的结束)
(~0~)/ vim真强大啊,掌声加鬼吼!!
更多详见:h count-items
:h su
:h search-pattern
如果要统计从50行到100行,出现的次数,则使用:
P.S.
由于我配置了set hlsearch,每次匹配完都会高亮匹配,直到下一次匹配。
想清除高亮,可以输入命令:nohl
:g/xxx/d,删除包含xxx的行
:v/xxx/d,删除不含xxx的行
:help :g :help :v
http://einverne.github.io/post/2017/10/vim-global.html
全局命令 :g
在 Vim 中有着意想不到强大的功能。当想要在整个文件中对于匹配的行或者不匹配行进行一些操作时,应该第一时间想到这个 :g
命令。
:[range]global[!]/{pattern}/{command}
简写可以写成
:[range]g/pattern/command
- [range] 指定文本范围,默认为整个文档
- pattern 在范围 range 内的行如果匹配 pattern,则执行 command
- ! 表示取反,也就是不匹配的行,也可以使用
vglobal
- command 默认是打印文本
整个命令可以理解成,在 range 范围内匹配 patter 的行执行 Ex command。所有的 Ex command 可以使用 :help ex-cmd
来查看。
常用的 Ex command 可以参考如下例子:
- d 删除
- m 移动
- t 拷贝
- s 替换
举例
范围匹配
比如在 20 行到 200 行之间,每一行下插入空行
:20,200g/^/pu _
删除匹配的行
最简单的使用
:g/pattern/d
会删除 pattern 批量的行,再比如
:g/^$/d
可以用来删除空白行。
删除不匹配的行
匹配使用 :g
,而不匹配有两种写法:
:g!/pattern/d
:v/pattern/d
:v
是 :in(v)erse
的缩写,如果为了记忆的话,可以记住 inverse。
删除大量匹配行
Vim 在删除操作时,会先把要删除的内容放到寄存器中,假如没有指定寄存器,会默认放到一个未命名的寄存器中,对于要删除大量匹配行的行为,可能导致 Vim 花一些时间处理这些拷贝,避免花费不必要的时间可以指定一个 blackhole 寄存器 _
。
:g/pattern/d_
移动匹配的行
将所有匹配的行移动到文件的末尾
:g/pattern/m$
复制匹配的行
将所有匹配的行复制到文件末尾
:g/pattern/t$
复制到 register a
Vim 每个字母都是一个寄存器,所以使用全局命令也可以将内容复制到某一个寄存器,比如 a
qaq:g/pattern/y A
qaq
清空寄存器 a,qa
开始记录命令到a寄存器,q
停止记录y A
将匹配的行 A (append) 追加到寄存器 a 中
存放到 a 寄存器之后就可以使用 "ap
来粘贴使用或者其他操作了。
反转文件中的每一行
just show the power of :g
:g/^/m0
:g
命令一行行匹配,匹配第一行时将第一行 m0
放到文件顶部,第二行放到文件顶部,当跑完一遍之后整个文件的每一行就反转了。
在匹配行后添加文字
使用 s
命令可以实现,同样使用全局 g
命令也可以实现同样的效果
:g/pattern/s/$/mytext
这里使用到了 s
命令, substitute 命令,可以使用 :help :s
来查看。
reference
示例:将文本
1234
123
12
1
转换成
1
12
123
1234
命令
:g/.*/mo0
或者
:g/^/mo0
补充说明
原理是从第一行开始,匹配每一行,然后执行mo(move)操作移动到第0行。如此处理每一行,直到文本末行。执行完毕文本逆序化成功!
- 窗口操作
^代表Ctrl键
4)光标在某个窗口后,就可以把这个窗口全屏:
ctrl + w 加 shift加管道符号|,就能全屏。
5)取消全屏:
ctrl+w 加 =。
注意:ctrl+w 和shift+| 这俩个命令是同时按。 ctrl+w和=是分开有一小间隔。
更便捷的方式是:set mouse=a, 用鼠标调整窗口大小
用ctrl+ w 结合 >, <调整水平尺寸, 用+ - 调整垂直尺寸, 这个是微调. 也可以用纯粹的命令用 :resize +/- n, 或者 vertical resize +/- n
:b {bufname} 通过文件名切换到 bufname 对应的文件,输入文件名时,可以用Tab键补全。
使用Tab键补全时,每按一次Tab键,就会补全一项。如果不小心跳过了想要打开的文件名,可以用 CTRL-P 键返回到前面的项。
https://blog.csdn.net/csCrazybing/article/details/53781385
vim非贪婪匹配,用.\{-}替换.*
\n 第n个元祖
360doc的删除<p><span>: %s/<.\{-}>//g