发布时间:2022-08-09 文章分类:编程知识 投稿人:王小丽 字号: 默认 | | 超大 打印

vi常用操作

现在是70%的时间用Windows,还有不少时间必须和vi打交道,不记录一下常用的vi操作实在是伤不起,记不清。

vi的两种模式切换:

  • 按Esc进入命令模式,可以在命令模式下进行保存,退出,查找,替换,复制,粘贴,删除行,恢复(undo),打开新文件,显示行号等操作
  • 按i或者a进入编辑模式,可以输入字符,可以用delete与backspace删除字符(i表示insert,a表示add/append)

在vi的配置文件~/.vimrc里加上syntax on(echo "syntax on" >> ~/.vmirc)就可以支持文件的语法高亮显示,一般缺省都至少有shell,php,python,c等语言的语法高亮支持。如果这个不起作用,可能还要再加上一行syntax enable。

不过有时候你需要手工添加语法高亮文件,例如我就需要添加markdown的语法高亮,操作是这样的:

  1. 修改/usr/share/vim/vim#/filetype.vim文件(其中#表示你的vim版本号,如73),找到对应的行,为文件添加上后缀与文件类型的对应,例如我给markdown添加的关联规则在maple与map类型后面,代码如下:
    " Markdown
    au BufNewFile,BufRead *.markdown,*.mdown,*.mkd,*.mkdn,*.md setf markdown
    
  2. 将这个markdown的语法高亮文件下载回来,复制到/usr/share/vim/vim#/syntax目录下即可
  3. 如果某些文件是markdown文件,但是后缀比较少见,可以在vim的命令模式下:set filetype=markdown让vim以markdown的语法高亮模板来处理它

下面是命令模式下的操作键组合:

  • $:光标移到当前行的末尾
  • ^:光标移到当前行的开头
  • *:在文件中查找光标当前所在的词
  • %:查找对应的另一半括号
  • x:删除一个字符
  • dd:删除当前行
  • dw:删除一个单词
  • dnd:从当前行开始删除n
  • u:恢复上一次的修改操作,即Undo
  • :w:保存
  • :q:关闭当前文件,如果只有一个文件则退出。
  • :q!:放弃所有的修改,关闭当前文件
  • :set nu:显示行号,也可以写全,即:set number
  • :set nonu:不显示行号
  • :n:跳转到第n
  • /word:在文件中查找word这个字符串,这里word也可以是正则表达式
  • n:在文件中继续查找字符串
  • :tabnew filename:在新的Tab里面打开filename文件
  • :tabn:切换到下一个Tab
  • :tabp:切换到上一个Tab

复制粘贴的操作是这样的,首先进入命令模式,然后在待复制文本开始的地方按v,接着移动到待复制文本结尾的地方按y,最后到需要粘贴文本的地方按p即可。

如果在上面第二步的时候不按y,而是按x的话,那就是剪切,而不是复制了。

vi的替换操作在命令模式下执行,操作是输入:ranges/search/replace/g。其中:

  • range表示范围,%表示当前文件的所有行,.表示当前行,$表示最后一行。例如10,20表示从第10行到第20行,.,$表示从当前行到最后一行
  • s表示替换
  • search是需要被替换的字符串的正则表达式
  • replace表示新的字符串或者新的字符串正则表达式
  • g可有可无,如果有的话就表示替换此范围内的所有search匹配的字符串,不然仅替换第一个字符串

像块折叠之类的功能现在对我来说有点太高级了,也记不住那么多,等这些命令都倒背如流了再说。