VIM学习1

时间:2023-03-08 16:26:51

  不得不说鸟哥的Linux写得太好了,VIM篇章,通读一篇,感觉收获挺大。之前几年前装逼硬着学,感觉硬是没懂,看的特晕,学得特别慢,抄一两遍也没什么多大的作用。这一回看了,感觉马上就能记住不少,当然大多数还是要回头看看,毕竟还是容易忘记。另外MAC上面的默认VIM设置感觉不大好呀,定制空间比较大。

  vim是一种文本编辑器,因为对文字处理的强大能力,甚至都可以作为程序开发工具了,当然vim官网上面就是这么介绍的。在程序员的修炼之道中写,纯文本是保存事情最长久的载体了。vim有三种模式,一般模式,编辑模式和命令模式,一开始接触vim就必须涉及到这三种模式,如果不懂的话,甚至不知道怎么编辑文字,在windows中的notepad中,我直接就可以编辑了键入即所得,vim还要按一个i才可以编辑,真烦,前一段时间我也是这么认为的。不过,那是外行硬着头皮来看的,我们从程序员的角度来看,其实这容易想起一个名词,解耦,如何打造一个强大的文本编辑器,我需要随意跳转,任性复制,规则性替换,各种插入,甚至我还想在文本编辑器中就可以运行程序,而一个普通的直接进来就编辑的文字编辑器是不能办到的。于是,考虑分模块,解耦之,这时候,聪明的前辈就按照假想中的文字编辑器的强大功能分成了三个模块来实现,文字的实际“编辑”放在编辑模式(这个是基础,基础不稳,地动山摇,所以万万不能少,但是只要给出就可以了),对文本的“普通”处理放在一般模式(一般模式才是文本编辑器的真谛嘛),命令模式是可以执行一些保存文件运行命令设置vim显示的功能的。理解了这个,再来看看常用的命令有哪些。

  最开始进入vim编辑器的时候,首先进入一般模式,这时候可以处理文字也可以进入编辑模式。

  i-I,o-O,a-A 三种插入模式。i和I是作为在光标前面插入的,i是光标的前一个字符插入(也就是进入插入模式,以下同),想一想insert就知道了,玛德,insert最烦了,每次都要插队,比如讨厌的排序算法,I(大写的i)这是在这一行的第一个字符前面插入。o-O是作为在这一行的上一行和下一行来插入的,小o比较正常,所以是在本行的下一行来插入,大O比较叼一点,所以干上了在上一行进行插入的工作。a-A是作为在光标后面插入的,a是光标的后一个字符插入,A是在这一行的最后面的一个字符的后面进行插入的。

  h-j-k-l,向左-下-上-右移动,这个不太容易记,这个键位摆在这里,有什么想法呢,YY一下,这么想,在中国从来上下的调动是比较厉害的也是很重要的,所以放在中间,平级的左右移动则是比较普通的所以放在两边,另外古代以右为尊,K要比J更加叼一点。所以平常就可以这么记咯。

  gg(1G),光标跳到文本的第一行

  G,光标跳到文本的最后一行

  20[ENTER]-[space],从本光标处所在行往下移动20行(类比任意数字n),从光标所在处向后移动20个字符

  20G,光标跳到文本的第20行   (这里提示下,如果vim没有默认显示行号的时候,那么在命令模式下敲入 :set nu 就可以看到行号的)

  0,光标跳到本行的第一个字符处

  $,光标跳到本行的最后一个字符处

  20j,向左移动20个字符(类比n行,向右也是一样,20k )

  x-X,向后-前删除一个字符,想一想剪切,多方便呀,比如在Android Studio中删除一行是ctrl+y,这么比较远,我直接ctrl+x就好了。

  dd,删除本行的数据

  20dd,删除光标所在的向下20行 (类比n行)

  d1G,删除光标所在行到第一行的所有数据

  dG,删除光标所在行到最后一行的所有数据

  d0,删除光标所在字符到第一个字符的所有数据

  d$,删除光标所在字符到最后一个字符的所有数据

  yy,复制光标所在处的这一行

  20yy,复制从本行往下面数20行的内容

  y1G,复制光标所在行到第一行的所有数据

  yG,复制光标所在行到最后一行的所有数据

  y0,复制光标所在字符到这一行的第一个字符的所有数据

  y$,复制光标所在行字符到这一行的最后一个字符的所有数据

  p-P,小p为在本光标的下一行或者后面(右边?)粘贴复制的数据,大P为在本光标的上一行或者前面(左边?)粘贴复制的数据,

  [ctrl]+[f] 屏幕向下翻动一页,类似page down

  [ctrl]+[b] 向上翻动一页,类似page up

  [ctrl]+[d] 屏幕向下移动半页

  [ctrl]+[u] 屏幕向上移动半页

  H 光标移动到屏幕的最上面一行的第一个字符

  M 光标移动到屏幕的中间一行的第一个字符

  L 光标移动到屏幕的最下面一行的第一个字符

  J 将光标所在行与下一行的数据结合成同一行,注意VIM严格区分大小写哦,毕竟键盘位不多哈。

  u,复原前一个操作,相当于windows中得还原,撤退

  [ctrl]+r 重做上一个操作,相当于向前走,就是还原做什么,那我就做跟还原相反得工作

  .  小数点,重复前一个操作,前面一个操作是干什么,那这次就依然干什么

  r,R,替换光标处的字符

  这里要注意强大的查找替换的组合命令,看到这里不容易吧。 =》-uhs《=

  :20,50s/shu/uhs/g    把第20行到第50行的所有含有shu的数据换成uhs。

  :1,$s/shu/uhs/g 从第一行到最后一行把所有含有shu的数据换成uhs。这里要注意第二个字母是$不是另外一个行的字母。

  :1,$s/shu/uhs/gc 和上面一样,但是增加提示确认功能,就是你要按一下y才会进行这个操作。

  另外每个操作后,在vim的状态上面会有提示yanked,这是个好兆头噢。

  另外记住,在一般模式上不要随便按数字,如果不记得是否按了,可以在进行一个操作前按一下esc,这个也是回到一般模式的命令

  下面是命令模式的一些命令,

  :w 将编辑的数据写入到硬盘中

  :w! 强制写入,!就是强制的意思,不管权限,当然实在搞不定,那一定是权限----

  :q 直接离开vim

  :q! 强制离开vim,不管提示,不管是否保存

  :wq 保存并离开  (:wq!就是强制保存并离开)

  ZZ 若文件修改了,则保存后离开;若文件没修改,则直接离开。挺方便实用的一个功能。而且TMD离手边近呀。

  :w [filename] 将编辑的文件保存为另一个文件

  :r [filename] 将另一个文件filename的数据读出来写入到编辑的这个文件的后面,就是在最后面又加上一块。

  :2,30 w[filename] 将第2行到第30行的数据写入保存到filename中。数字可以替换成其它数字,类似n.

  :! command 暂时离开vim执行其它在shell上面的命令,比如 :! python 1.py 即为运行1.py文件

  :set nu 显示行号

  :set nonu 不显示行号

  在VIM中,数字是很有意义的,魔法数字magic number,不过记得一般数字都是要先按的。

  VIM崩溃了,记得按d或者E,当然直接看英文最OK。

  VIM中还有个比较叼的功能,块选择,visual block,就是一块一块的不规则的选取。

  v ,字符选择,会将光标经过的地方进行反白选择

  V,行选择,会将光标经过的行进行选择

  [ctrl]+v,块选择,可以用长方形式选择数据

  y,将反白的地方复制。

  d,将反白的地方删除。

  p-P,粘贴之

  还有个多窗口功能,可以提一下,

  :sp {filename} 新窗口启动一个文件,如果filename不填的话,则默认再打开一个当前编辑的文件,如果填了一个新文件的名字则会打开那个新文件的窗口

  [ctrl]+w+j 将光标移到下一个窗口

  [ctrl]+w+k,将光标移到上一个窗口

  :q 离开咯。

  

  ~/.vimrc 和~/.viminfo是vim的配置文件,info 会把曾经做过的行为记录下来,rc则是一些默认的配置文件,rc相比:set nu可以说是一个模板,而命令只是针对目前编辑的这个文件。

  注意不建议修改整体的vimrc,可以自己手工创建一个。

  

  vim还有考虑到dos和Linux的断行字符的格式化工具,就是"/"和“\”还有换行的处理,什么CR ,什么LF,比较蛋疼。

  另外还有个语系编码转换的工具,iconv.

  iconv --list 展示系统支持的转换语言集

  iconv -f 原来编码 -t 新编码 filename [-o newfile]  从原来编码转换到新的编码,f-from ,t-to,孩子,好好学习英语是很重要的。

  file *查看该目录内(一般在目录内这么干)文件类型