欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

vim使用

程序员文章站 2022-05-28 17:45:53
...

Sublime插件 Emmet/PyV8错误
[~~~~高手总结](http://www.cnblogs.com/itech/archive/2009/04/17/1438439.html
vimrc配置
VIM IDE
mvim安装支持Python
在VIM中添加一键编译和一键运行
macVim安装
mvim --version |grep python 检验vim是否支持Python

1. vim 配置:

sudo vim /etc/vim/vimrc

syntax on   //语法高亮如果这行被注释掉了可以取消注释
请在您的VIM的最后一行,输入他们,可以让您的VIM变得更漂亮、舒服。
set nu                          // 在左侧行号
set tabstop                  //tab 长度设置为 4
set nobackup              //覆盖文件时不备份
set cursorline              //突出显示当前行
set ruler                      //在右下角显示光标位置的状态行
set autoindent

2. 操作

2.1. 文件操作

Vi file :使用vim打开要编辑的文件
:w :保存修改
:q! : 退出vim,后面加感叹号表示不保存修改强制退出
:wq: 保存修改并退出
:saveas ~/some/path/: 将文件保存到其他位置
ZZ: 同:wq

2.2. 编辑:
  • 基本动作
    d: 删除
    c: 修改
    y: 拖拉(拷贝)
    v: 可视化选择 (V for line vs. character)修饰语定语用在名词之前,表明以哪种方式来执行动作。
    i: 内部
    a: 周围
    NUM: 数字 (e.g.: 1, 2, 10)
    t: 查找到指定字符,并跳转到这个字符的前面
    f: 查找到指定字符,并跳转到字符所处的位置
    /: 查找字符串 (literal or regex)名词在英语中,名词用来表示你所操作的对象。它们都是客体。在vim中也是这样。
  • 基本对象:
    w: 单词
    s: 句子
    ): 句子 (另一种操作方式)
    p: 段落
    }: 段落 (另一种操作方式)
    t: 标签 ( HTML/XML)
    b: 块 (编程语言)
  • 组合命令示例
    d2w 删除两个单词
    cis 修改所在的句子(删除当前句子并进入插入模式)
    yip 拷贝当前所在的段落
    ct< 修改当前光标所在位置到下一个<之间的文本内容。

从语法上来说,使用单个字母”t”来表示这个向前查找的“目标”,这样我就可以使用“dt.”表示删除当前位置到下一个句号之间的内容,”yt;”表示拷贝当前位置到下一个分号之间的内容。

  • 定位查找
    /{string}:搜索字符串输入”n”依次向下查找,或者”N”向上查找。如果想要逆向查找字符串也可以使用”?”来代替”/”.
    f<(F<) 向后(向前)查找并直接跳转到<字符
    t<(T<) 向后(向前)查找并跳转到<的前一个字符
    *:搜索当前光标位置单词的其他实例
    n : 搜索完成后,跳转到下一个匹配实例
    N :搜索完成后,跳转到上一条匹配实例
    ; : 跳转到指定字符时
    , :跳转到指定字符时
    j : 向下移动一行
    k :向上移动一行
    h :向左移动一个字符
    l :向右移动一个字符
    0: 移动到行首
    $: 移动到行末
    ^: 移动到行首非空字符
    还可以按单词移动:
    w: 先前移动一个单词
    b: 向后移动一个单词
    e: 移动到当前单词末尾当使用大写字母时,vim会忽略掉单词间的分隔符,这样原本被分隔符隔开的多个单词会因此被视为一个大单词。
    W: 向前移动一个大单词
    B: 向后移动一个大单词这种大写命令的优势在我们实际工作中会频繁地碰到。按句子或段落移动):向前移动一条句子}: 向前移动一个段落在屏幕间移动
    H:向上移动一屏
    M:移动到屏幕中间
    L:移动到屏幕底端
    gg: 移动到文件顶端
    n+gg(nG): 移动到行号n
    G:移动到文件结尾
    ^U: 向上移动半屏
    ^D: 向下移动半屏
    ^F: 下一页
    ^B: 上一页来回跳转在普通模式下,可以在两点间来回跳转,这在实际操作中非常有用。Ctrl-i: 跳转到之前所在的位置
    Ctrl-o: 跳回你实际的位置
    其他动作:
    $line_numberH: 移动到指定行号
    M: 移动到屏幕中间
    L: 移动到屏幕底端
    ^E: 向上滚动一行
    ^Y: 向下滚动一行
    ^U: 向上移动半屏
    ^D: 向下移动半屏
    ^F: 向下移动一页
    ^B: 向上移动一页
    i : 从当前光标位置之前插入
    a : 从当前光标位置之后插入
    I :从当前行开始位置插入
    A :从当前行行末插入
    o : 在当前行下新增一行,并从新行插入
    O :在当前行上新增一行,并从新行插入
    r : 替换当前光标所在字符
    R :替换当前光标的字符,并一直向后替换(替换模式)
    cm:修改文本,其中m表示移动的动作,比如,一个单词,一句或者一个段落。
    C :修改当前所在行
    ct?: 修改问号前的这条问句内容
    s:替换当前字符
    S: 替换整行修改句子
    cis移动到行首并进入插入模式I在当前光标位置之后进入插入模式格式化当前段落gq apgp
    根据预设的文本宽度testwidth以及参数指定的文本范围来工作,这意味着对于你指定的任意范围的文本,gp都可以自动校准宽度,使得文档看起来干净又整洁。【注意: ap表示文本对象”整个段落”的覆盖范围】
  • 删除命令
    x: 删除当前光标的字符
    X:删除当前光标的前一个字符
    dm: 根据定义的m来确定删除范围,一个单词或者一句话或者一个段落。
    dd: 删除当前行
    n+dd: 删除下面n行
    10,18d:删除10-18行
    10,.d:删除10-当前行
    dt. : 删除当前位置到下一个句号之间的所有内容
    D: 删除当前光标位置到本行末的所有内容(对比上面的C,D不会进入插入模式)
    J: 将上下两行合并(删除两行之间的换行符)
    u: 撤销上一个动作
    Ctrl-r: 重做上一个动作【注意:记得将CAPSLOCK键映射为Ctrl,这样你才能更方便快速的使用组合键。】

通过“.”这个小点可以让你做一些很棒的事情——重复之前你的任何一个操作。使用“.”来重复上一次操作你所做的许多操作可能都有重复的价值。比如进入插入模式添加一些文本内容。你只需执行一次,然后一直执行点命令来重复就可以了。

请看下面的例子。删除一个单词dw紧接着执行,再删除5个单词5.多么给力! 【注意:除了点命令外,&也是一种强大的重复命令,用于重复ex模式下的上一条命令(还记得ex模式吗?)】

  • 复制粘贴
    Vim用拉取来表示拷贝,简写为y。
    y: 拷贝选中内容
    yy: 拷贝当前行
    n+yy:拷贝n行
    p: 粘贴
    :6,9 co 12 复制第6行到第9行之间的内容到第12行后面。

dd命令删除了一行,你可以用p粘贴回去。有一点要记住:粘贴的起始位置从你当前光标位置之后开始,
ddp使用这条命令可以很快速的交换两行的位置。删除你所在的行将它粘贴回之前所在位置的下面。(
拼写检查选项。在~/.vimrc的某个位置中添加找出拼写错误如果在配置文件中设置了拼写检查的选项,那么拼错的单词会自动添加下划线。你也可以手动输入:set spell和:set nospell来启用或禁用。不管怎么说,一旦开启了拼写检查,如果存在拼写错误的话,你就可以使用以下命令来跳转:跳转到下一处拼写错误]s
跳转到上一处拼写错误[s
若光标处是错误单词,给出修改建议z=
将识别的错误单词标记正确zg
将vim视为正确的单词标记为错误单词zw
我习惯在~/.vimrc中添加一些拼写相关的简写命令。首先就是让修正拼写错误的命令变得简单:将拼写修正标记为f在某些情况下,比如说我需要创造性的拼写一些单词时,我会使用下面的命令来取消拼写检查。想要重新打开拼写检查只要再执行一次这个命令就可以了。Toggle spelling visuals withsnnoremaps :set spell!

  • 替换
    Vim的另一个强大的功能是替换。命令分为三部分,首先指定将要被替换的字符串,之后是替换的新字符串,最后指定替换范围。基本设置为:%s
    将每行的foo替换为bar:%s /foo/bar/g
    将当前行中的foo替换为bar:s /foo/bar/g【注意: 两个命令的不同之处在于,单行替换s前少了%】

3. 进阶

  1. 在整个文件或某几行中在行首或行尾加一些字符串
    vi file
    :3,$s/^/some string / 在文件的第一行至最后一行的行首前插入some string
    :%s/$/ some string/g 在整个文件每一行的行尾添加 some string

:%s/string1/string2/g 在整个文件中替换string1成string2
:3,7s/string1/string2/ 仅替换文件中的第三到七行中的string1成string2

Note: s为substitute,%表示所有行,g表示global

  1. 同时编辑两个文件,在两个文件中拷贝剪贴文本
    vi file1 file2
    yy 同时打开两个文件,在文件1的光标所在处拷贝所在行
    :n 切换到文件2 (n=next)
    p 在文件2的光标所在处粘贴所拷贝的行
    :N 切换回文件1
  2. 替换文件中的路径

:%s#/usr/bin#/bin#g 把文件中所有路径/usr/bin换成/bin
或者用
:%s//usr/bin//bin/g 在'/'前用符号指出'/'是真的单个字符'/'

  1. 用 vi 多行注释
    如果要给多行程序作注释,一个笨办法就是 插入 # ,然后用 j 跳到下一行用 . 命令,重复上个命令。如果要注释几百行,这样的方法恐怕太愚蠢了。一个聪明的办法是:
    :.,+499 s/^/#/g
  2. 我们可以看几个例子。
    单词文本对象
    首先来看基于单词的对象
    iw : 单词内
    aw :单词周围这些都是目标(名词),所以我们可以对它们做一些操作,比如说删除、修改等等。
    删除单词(包括单词周围的空格)daw【注意: 对象内部与对象周围这两者之间的区别在于单词旁边是否有空格】
    句子文本对象
    is: 句子内部
    as: 句子周围
    句子对象的工作原理与单词对象是一致的,
    修改整条句子cis 它会删除整条句子并进入插入模式等待你输入新的内容。更多对象类型还有许多其他的对象类型,我只简单的来介绍一下。
    段落 : ip 和ap
    单引号 : i’和a’
    双引号: i”和 a”
    当我编辑代码或者HTML文件时,时常会用到这些命令。只需要输入ci”就可以删除双引号内部的所有内容,并将你挪到双引号中间进入插入模式等待你的输入。对其他类型的某些对象同样适用,比如说各种括号(圆括号、尖括号、大括号)和标签(html)。比如说编辑HTML链接时,URL地址一般在双引号之间,链接文本在标签中定义;通过vim这两条命令可以很方便地修改:ci”(修改URL)和cit(修改链接文本)。
    文本对象总结下面列出常见的文本对象:
    单词: iw 和 aw
    句子: is 和 as
    段落: ip 和 ap
    单引号: i’ 和 a’
    双引号: i” 和 a”
    反勾号 : i· 和 a
    圆括号: i( 和 a(
    方括号: i[ 和a[
    大括号: i{ 和a{
    标签: it 和at

首先,学会进入可视化模式并选择文本。通过“v”进入可视化模式,有三种选择。基于字符选中: v基于行选中: V段落选中: Ctrl-v在容器内部选中文本有时候你会处于一段文本中,两头被,.({[之类的符号所包围。
你可以使用下面的命令来选中这部分的内容:选中圆括号中的内容vi(选中中括号之间的内容vi[你还可以加数字限定选择的层数(比如说你处于嵌套层)选中两层大括号之间的所有内容v2i{【注意: 你也可以使用va来代替vi。
基于字符的可视化选择从基于字符的可视化开始介绍(从普通模式输入v进入可视化模式),在这种模式下你可以选中单个字符、多个字符、单词等等。处于可视化模式中,你的移动动作会修改被高亮选择的文本。这就意味着,w或)之类的动作也会起作用,它们可以扩展当前高亮选择的范围。
每行需要追加个冒号。你会怎么做?对整个文件添加分号0i:j0vG.wut大大简化了我们的操作,
步骤如下:走到第一行行首并插入一个冒号(0i:)走到下一行定位到行首位置(j0,注意之前是插入模式,需要先回到普通模式)选中当前行到文件末尾的内容(vG)给选中的内容添加冒号(.)这样对六万行文件的操作就全部完成了。