Vi学习

趁着台风,在家学习学习vi

vim的配置

  1. .vimrc文件是vim的配置文件,位于~/.vimrc, vim的字体 快捷键 插件 均可通过配置文件配置
    前缀键;各类 vim 插件帮助文档中经常出现 ,即,前缀键。vim 自带有很多快捷键,再加上各类插件的快捷键,大量快捷键出现在单层空间中难免引起冲突,为缓解该问题,引入了前缀键 , 默认的前缀键是\
  " 定义快捷键的前缀,即
  let mapleader=";"
  1. 插件管理
    .vim/ 目录是存放所有插件的地方。vim 有一套自己的脚本语言 vimscript,通过这种脚本语言可以实现与 vim 交互,达到功能扩展的目的。一组 vimscript 就是一个 vim 插件,vim 的很多功能都由各式插件实现。
    vim 插件目前分为 *.vim 和 *.vba 两类,前者是传统格式的插件,实际上就是一个文本文件,通常 someplugin.vim(插件脚本)与 someplugin.txt(插件帮助文件)并存在一个打包文件中,解包后将 someplugin.vim 拷贝到 ~/.vim/plugin/ 目录,someplugin.txt 拷贝到 ~/.vim/doc/ 目录即可完成安装,重启 vim 后刚安装的插件就已经生效,但帮助文件需执行 :helptags ~/.vim/doc/ 才能生效,可通过 :h someplugin 查看插件帮助信息。传统格式插件需要解包和两次拷贝才能完成安装,相对较繁琐,所以后来又出现了 *.vba 格式插件,安装便捷,只需在 shell 中依次执行如下命令即可
vim someplugin.vba
:so %
:q

不论是直接拷贝插件到目录,还是通过 *.vba 安装,都不便于插件卸载、升级,后来又出现了管理插件的插件 vundle。

我希望每个插件在 .vim/ 下都有各自独立子目录,这样需要升级、卸载插件时,直接找到对应插件目录变更即可;另外,我希望所有插件清单能在某个配置文件中集中罗列,通过某种机制实现批量自动安装/更新/升级所有插件。vundle(https://github.com/VundleVim/Vundle.vim )为此而生,它让管理插件变得更清晰、智能。
vundle 会接管 .vim/ 下的所有原生目录,所以先清空该目录,再通过如下命令安装 vundle

git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim

接下来在 .vimrc 增加相关配置信息

" vundle 环境设置
filetype off
set rtp+=~/.vim/bundle/Vundle.vim
" vundle 管理的插件列表必须位于 vundle#begin() 和 vundle#end() 之间
call vundle#begin()
Plugin 'VundleVim/Vundle.vim'
Plugin 'altercation/vim-colors-solarized'
" 插件列表结束
call vundle#end()
filetype plugin indent on

其中,每项
Plugin 'altercation/vim-colors-solarized'
对应一个插件,后续若有新增插件,只需追加至该列表中即可;
需要安装插件,先找到其在 github.com 的地址,再将配置信息其加入 .vimrc 中的call vundle#begin() 和 call vundle#end() 之间,最后进入 vim 执行
:PluginInstall
便可通知 vundle 自动安装该插件及其帮助文档。

要卸载插件,先在 .vimrc 中注释或者删除对应插件配置信息,然后在 vim 中执行
:PluginClean

即可删除对应插件。插件更新频率较高,差不多每隔一个月你应该看看哪些插件有推出新版本,批量更新,只需执行
:PluginUpdate

Vim操作

移动

  • hjkl
  • gg 文件第一行
  • G 文件最后一行
  • 123+G 跳转到指定行 ( 4% 数字+% 按百分比跳转 )
  • H/M/L 跳转到当前屏幕的 顶部/中间/底部
  • ^ 移动到行首第一个非空白, 0 移动到行首
  • $ 移动到行尾 (^ $ 和正则一样)
  • % 移动到当前代码区块的开始/结尾(匹配(),[],{})
  • ctrl + g 查看当前文件总行数
按单词移动
  • w / b 下一个/上一个 单词词首
  • W / B 下一个/上一个 字符串头
  • e / ge 下一个/下一个 单词词尾
  • E / gE 下一个/上一个 字符串尾部

上面这些命令都使用’iskeyword‘选项中的字符来确定单词的分界,还有几个命令,只把空白字符当做”单词“的分界。当然,这里说的”单词“已经不是传统意义上的单词了,而是由非空白字符构成一串字串

查找

  • /xxx 查找光标后的单词 xxx
  • ?xxx 查找光标前的单词 xxx
  • n / N 移动到下一个/上一个 匹配
  • ftext 在当前行向前查找text
  • Ftext 在当前行向后查找text
  • :g/text/command 在所有包含text的行运行command所表示的命令
  • :v/text/command 在所有不包含text的行运行command所表示的命令

vim保存了查找历史, 在输入 / 或 ? 后, 可以通过 或者上下光标键, 翻看历史记录, 再次查找

另外你还可以使用 q/ 和 q? 命令,在vim窗口最下面打开一个新的窗口,这个窗口会列出你的查找历史记录,你可以使用任何vim编辑命令对此窗口的内容进行编辑,然后再按回车,就会对光标所在的行的内容进行查找。

vim中有许多与查找相关的选项设置,其中最常用的是incsearch(输入内容时, 即对输入的内容开始匹配) ,hlsearch(高亮), ignorecase(忽略大小写)。

替换 ( :s 命令)

:[range]s/from/to/[flags]

range:范围,如果没有指定范围,则作用于但前行。

  • :1,10s/from/to/ 表示在第1到第10行(包含第1,第10行)之间搜索替换;
  • :10s/from/to/ 表示只在第10行搜索替换;
  • :%s/from/to/ 表示在所有行中搜索替换;
  • 1,$s/from/to/ 同上。

flags 有如下四个选项

  • c confirm,每次替换前询问;
  • e error, 不显示错误;
  • g globle,不询问,全部替换。如果不加 g 选项,则只替换每行的第一个匹配到的字符串;
  • i ignore,忽略大小写。

这些选项可以合并使用,如 cgi 表示不区分大小写,全部替换,替换前询问。

  • & 重复执行最后的 :s (替换)命令

执行Shell命令

:!ls -al

撤销

  • u 撤销上一次操作
  • Ctrl+r 恢复上一步被撤销的操作

删除

  • x 删除当前字符
  • X 删除光标前的字符, 前面可以加数字
  • dw 删除一个词
  • dd 删除当前行

复制, 粘贴, 剪切

选中文字
  • v+光标移动 (按字符选择)高亮选中所要的文本,然后进行各种操作(比如,d表示删除)。
  • V (按行选择)
  • v+选中的内容+c 更改选中的文字
复制 :y(ank)
  • y 用v命令选中文本后,用y进行复制
  • yy 复制当前行, 等同于(Y)
  • y0 复制当前位置到行首
  • y$ 复制当前位置到行末
粘贴
  • p 在光标位置之后粘贴
  • P 在光标位置之前粘贴
剪切
  • v + 选中的内容 + d 剪切

剪切板

  1. 简单的复制粘贴
    vim提供12个剪贴板,它们的名字分别为vim有11个粘贴板,分别0,1, 2 ... 9, a, "; 如果开启了系统剪贴板,则会另外多出两个 + 和 *。使用 :reg 命令,可以查看各个粘贴板里的内容。
    :reg
    在vim中简单用y只是复制到 " (双引号)粘贴板里,同样用p粘贴的也是这个粘贴板里的内容。

  2. 复制和粘贴到指定剪贴板
    要将vim的内容复制到某个粘贴板,需要退出编辑模式,进入正常模式后,选择要复制的内容,然后按 "Ny 完成复制,其中N为粘贴板号(注意是按一下双引号然后按粘贴板号最后按y),例如要把内容复制到粘贴板a,选中内容后按 "ay 就可以了。
    要将vim某个粘贴板里的内容粘贴进来,需要退出编辑模式,在正常模式按 "Np ,其中N为粘贴板号。比如,可以按 "5p 将5号粘贴板里的内容粘贴进来,也可以按 "+p 将系统全局粘贴板里的内容粘贴进来。

  3. 系统剪切板
    Vim支持系统剪贴板,需要打开clipboard功能。使用下面的命令,检查当前版本的Vim,是否支持clipboard。
    $ vim --version
    如果不支持的话,需要安装图形化界面的vim(即gvim),或者重新编译vim。
    $ sudo apt-get install vim-gnome
    另一种方法,是安装vim-gui-common。
    $ sudo apt-get install vim-gui-common

缩进文本

选项 作用
^i(ctrl+i)或tab 插入文本时,插入移动的宽度,移动宽度是事先定义好的
:set ai 打开自动缩进
:set sw=n 将移动宽度设置为n个字符
n<< 使n行都向左移动一个宽度
n>> 使n行都向右移动一个宽度,例如 3>> 就将接下来的三行每行都向右移动一个移动宽度

多窗口

参考:
[https://github.com/yangyangwithgnu/use_vim_as_ide#0.1]
[http://easwy.com/blog/archives/advanced-vim-skills-basic-move-method/]
[https://github.com/ruanyf/articles/blob/master/dev/vim/operation.md]
[http://tanqisen.github.io/blog/2013/01/13/vim-search-replace-regex/]

你可能感兴趣的:(Vi学习)