博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

vim好的快捷键

Posted on 2018-10-29 10:23  bw_0927  阅读(289)  评论(0)    收藏  举报

 

上下最大最小:

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  何维川   124.63     172  0.72
2  张子寅   99.67      172  0.58
3  周广滨   93.34      188  0.50
4  陈兴     41.86      188  0.22
5  薛永成   26.68      188  0.14
6  张永福   18.25      188  0.10
7  李华田   18.25      188  0.10
8  葛祥营   11.89      164  0.07
9  王天民   -16.55     156  -0.11
10 刘峰     -16.19     152  -0.11
11 郭居岗   -86.73     152  -0.57
12 杨军     -213.45    152  -1.40
 
如果我们想以第4列数据进行排序,可以在vim中如此做:
1,12!sort -r -n -k4.1,5
 
-r 是降序排序
-n 是按数字大小排序
-k,表示根据那个字段排序,4.1,表示第4列第一个字符开始 ,5表示到第5个字段为结束
-t 后面跟分隔符,缺省是空格

 

 

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行,出现的次数,则使用: 

:50,100s/hello world//gn
:%s/xxx//gn  全文统计

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键

^Wq,离开当前窗口
^Wc,关闭当前的窗口
^Wo,关闭当前窗口以外的所有窗口

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