效果图来一个:

http://vim.spf13.com/

这个网站里面的vim配置非常全,推荐.

下面是对这个vim快捷键总结:

<Leader> 是","

打卡一个二进制文件:
      输入':', 然后输入'%!xxd'

调整窗体大小:变大Ctrl+Shift+'=',变小Ctrl+w+'-'

复制粘贴:
  系统拷贝: " + y

  系统粘贴: ctrl + shift + v

  复制一行:  0y1y:  0跳转到行首,y1y复制一行,

  复制一个单词: ye :从当前位置复制到单词的末尾.

  复制某一部分: y2/foo 会一直复制到第二个foo出现的地方

只删除不剪切: 将删除的内容放入 black hole register "_ 中如 "_dd 就可以将当前行内容删除并且不会放在任何寄存器中。

删除: d0 删至行首。
    d$ 删至行尾。

插入模式:

  • a → 在光标后插入
  • o → 在当前行后插入一个新行
  • O → 在当前行前插入一个新行
  • cw → 替换从光标所在位置后到一个单词结尾的字符

Nerd Tree: ctrl + e只是显示nerdtree, 但是如果需要显示当前文件的nerd tree: ,nt

      r – 刷新当前目录及所有子目录
      R – 刷新当前根路径及所有子目录

关闭或开启缩进的dark/light模式: <leader>ig

窗口: ctrl + w切换窗口,  先键入ctrl + w然后再键入c:关闭窗口,

翻页:  ctrl + u向上翻页, ctrl + f 向下翻页

跳转: 首先需要安装:sudo apt-get install exuberant-ctags , ctrl+ ]跳转到定义,ctrl + t反向跳转,

    ctrl+d 向下翻页 d(down) , ctrl+u 向上翻页 u(p)

    0:跳到当前行首, ^:跳到当前行的第一个字符.

    fa→ 跳到这行a字母的下一个出现的地方。(对比 ; )会查找下一个(上一个)地方. 3fa→ 在这行中查找a出现的第三个位置.

    gg: 回到顶部, shift + g 回到底部.

    w: 跳转到下一个单词的开头,W:下一个单词(跳过标点), b: 跳到上一个单词, B:跳到上一个单词(跳过标点)e: 跳转到下一个单词的结尾.

    %:跳转对应的"([{" 处.

    *(对比#) : 跳到当前光标的下一个(上一个) 相同单词的地方
    ctrl +o/i : 向后跳转,向前跳转.

    如果有多处文件定义,首先实行":ts",然后选择定义的地方即可进入

区域选择:

    J→ 让所有行连接在一起

    <(对比>) → 向左(右)对齐.

    注释多行: 先用^跳转到行首,然后Ctrl-v进入列编辑模式,然后往下到你要注释段的末行,按I,这时光标会跳回选区的第一行,输入注释符,然后按Esc,完工。

    所选择的行的末尾添加一些东西: 

        • <C-v>
        • 跳到目的行 (jjj 或者 <C-d> 或者 /patternor%等等…)
        • $跳到行末尾
        • A, 写入一些文本,[按] ESC 键.

    行选择: shift + v

    选中{}里面的内容: 把光标放在{或}上面,按回车键即可以选中括号里面的内容. 另外选中(), [] 还有ifdef 宏定义体内的内容都是使用回车键选中即可

展开折叠:

    zm 关闭所有
    zr 打开
    zR 打开所有
    zc 折叠当前行
    za 打开当前折叠,再执行一次关闭当前折叠
    zd 删除折叠
    zD 删除所有折叠

NERD Commenter :

    ,ca :切换注释方式,比如C/C++ 的块注释/* */和行注释//

    ,cc :注释当前行

    ,c+空格  :切换注释/非注释状态

    ,cs  :以”性感”的方式注释

    ,cA :在当前行尾添加注释符,并进入Insert模式

    ,cu :取消注释

TagBar :

        <leader>tt打开当前文件的tag目录

surround: 修改包围符号,举例: 'hello'

                  输入cs'" 变成"hello"

              输入 cs'<q>变成  <q>hello</q> , 然后再输入 cst' 变回'hello'

              输入ds'删除包围符号,变成hello

              输入ysiw'添加包围符,变成'hello'

              输入yss' 整行添加包围符,变成'hello,world' 

修改配色:  

    echo colorscheme 256-jungle > ~/.vimrc.local,  所有的配色保存在~/.vim/bundle/vim-colors/ 以及 ~/.vim/bundle/vim-colorschemes/ 两个目录中.

    也可以直接在打开的vim中输入:color molokai 切换色彩主题.

    我主要用到是C,推荐几个:kruby

查找文件: ctrl + p 启用ctrlp插件,可以查找当前目录的,

      Press <c-f> and <c-b> 切换模式,Files, Buffers 和 MRU
      Press <c-d> 文件名查找.
      Press <c-r> 正则表达式模式查找.

替换命令:

  1:  s/old/new/    把当前行中模式old的第一次出现替换为new

   2:  s/old/new/g   把当前行中的每一个old替换为new

   3:  50,100s/old/new/g   把第50-100行之间的old替换为new

   4:  1,$s/old/new/g   把整个文本中的old替换为new

   5:  %s/old/new/g     把整个文本中的old替换为new

   6:  1,$s/old/new/gc 替换前要进行确认(想替换输入 y ,不想替换直接 回车)

  1. 删除行尾空格::%s/\s\+$//g
  2. 删除行首多余空格:%s/^\s*// 或者 %s/^ *//
  3. 删除沒有內容的空行:%s/^$// 或者 g/^$/d
  4. 删除包含有空格组成的空行:%s/^\s*$// 或者 g/^\s*$/d
  5. 删除以空格或TAB开头到结尾的空行:%s/^[ |\t]*$// 或者 g/^[ |\t]*$/d

  去除windows编辑过的文件的换行符^M, "%s/\r/ ":

少量替换的推荐方法

其实很多时候可能仅仅需要对几个变量做更改,范围不大,调用这么销魂的命令明显得不偿失。这种情况下,最快捷的方法还是将光标移动到要修改的变量名前(最好是通过search),cw键入新的变量名Esc,然后n跳转到下一个match,然后.重复替换操作……

当然如果你对Vim命令情有独钟,下面的命令一样解决问题
:bufdo %s/pattern/replace/ge | update
针对所有的buffer(所有打开的文件)进行替换。还有更狠的:

:arg *.cpp	 #当前路径下的所有cpp文件
:argadd *.h #加上所有h头文件
:argdo %s/pattern/replace/ge | update #对arg中定义的所有文件执行替换操作

 \=也是一个好用的工具:

This is number X

This is number X

This is number X

This is number X

This is number X

This is number X

This is number X

然后冒号进入Command-line模式 (关于Vim的几种模式)

:%s@X@\=line('.')

就得到了

This is number 1
This is number 2
This is number 3
This is number 4
This is number 5
This is number 6
This is number 7
This is number 8
This is number 9
This is number 10

\=其实就是对\=之后的表达式求值用来做替换。line('.')是一个返回数值的函数,返回当前行的行号,所以每一行的行号被作为\=的返回值,用来替换X,就得到了需要的结果。

其他方法比如做一个宏(Macro)来逐行递增也可以达到效果,但是不如用这个\=方便。
因为\=后面的部分是作为表达式来处理的,所以更复杂一些的替换都可以很简单的得到实现,比如 (先撤销掉之前的改动,下同):

:%s@X@\=line('.')*line('.')

就可以得到

This is number 1
This is number 4
This is number 9
This is number 16
This is number 25
This is number 36
This is number 49
This is number 64
This is number 81
This is number 100

我个人觉得最好用的是这个功能

:%s@X@\=printf("%03d", line('.'))

可以得到

This is number 001
This is number 002
This is number 003
This is number 004
This is number 005
This is number 006
This is number 007
This is number 008
This is number 009
This is number 010

自动补全snippet:
      比如,输入"for" 然后按tab键,用光标下键选择匹配的snippet,然后键入"ctrl + k"选择想要的snippet。snippet的格式中$1,$2分别表示按tab匹配$1,再按一次tab匹配$2.

surround插件操作:

    "helloworld" -> ds"(删除"surrounding) -> helloworld

      "helloword" -> cs") -> (helloword)

      "helloword" -> cs"( -> ( helloword ), 所有surrounding符号左边的替换都会加上空格,右边的不会。

       if *x>3 {      -> ysW) ->if (*x>3) {,        ys添加一个surround, w表示word, W表示WORD(被空格隔开的连续的字符串), p代表paragraph

fjdskfjkj fdjskfl fdskajfkl fdsaaf  -> yss" -> " fjdskfjkj fdjskfl fdskajfkl fdsaaf"

       ci[ ci( ci< ci{ 删除一对surrounding并进入插入模式继续编辑。

di: 剪切surrounding之间的文本;  yi复制。 ca:同ci,但修改内容包括surrounding符号本身。 da, ya同, a均表示包含surrounding符号本身。

      t 表示html/xml 的一对标签, 比如  <div>abc</div> ->dst -> abc

TAB替换为空格: 
    :set ts=4
    :set expandtab
    :%retab!
显示空格:

:b 27   --  buffer 切换跳转, 这个就是切换到编号27的buffer, 显示buffer可以使用ls命令。 27和b之间可以不加空格,另外加入27是test.c 输入"te"也是可以跳转过去的。

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

.  重复上一次操作

自动补全选择:首先用光标键选中需要补全的内容,然后ctrl + j,即可

显示变量和函数tag: <Leader>tt

nnoremap,inoremap,vnoremap

前缀代表生效范围
inoremap就只在插入(insert)模式下生效
vnoremap只在visual模式下生效
nnoremap就在normal模式下(狂按esc后的模式)生效
这样可以减少快捷键所用到的键位组合的个数
一个组合可以有多种用途 就不用费劲心思思考 该映射哪个没被绑定过的键了

出现的问题:

1. 升级到spf13 3.0版本,编辑模式 光标键变成 ABCD?

解决: 修改 .vimrc.before文件: let g:spf13_no_omni_complete = 1

2. 升级到spf13 3.0版本,提示:

neocomplete does not work with this version of Vim.
It requires Vim 7.3.885 or later with Lua support ("+lua").

解决: vim-nox
vim-gtk
vim-gnome
vim-athena   根据自己的系统类型安装其中的一个

vim spf13的更多相关文章

  1. Vim插件安装

    一.常用的插件 sudo apt-get install vim vim-scripts vim-docsudo apt-get install ctagssudo apt-get install v ...

  2. spf13-vim – The Ultimate Distribution for Vim Editor

    spf13-vim is a cross platform and highly customizable assortment of vim plugins and various resource ...

  3. Vim完全教程

    一.简介 世界上只有三种编辑器,EMACS.VIM和其它.   我们所处的时代是非常幸运的,有越来越多的编辑器,相对于古老的VIM和EMACS,它们被称为现代编辑器.我们来看看这两个古董有多大年纪了: ...

  4. linux下开发c第一弹--相关环境需求

    我用的是mac,mac和linux一般集成了一定的开发环境,基本上需要gcc.vim.gdb之类的,linux下需要apt-get,mac下homebrew的brew install都可以解决问题.同 ...

  5. Mac应用推荐

    知识管理 Outline Curio Together 开发 Clion Vim + spf13 Transmit 辅助应用 Moom PopClip Timing AppClean Markdown ...

  6. centos7(debian,manjora,freebsd)命令及安装mysql、git、gpg、gogs,安装docker,zsh,chrome

    最小安装: 1. 选择English 2. DATE & TIME 修改好本地时间 SOFTWARE SELECTION默认的Minimal Install就好 INSTALLATION DE ...

  7. macvim/babun+spf13-vim

    mac: macvim brew install macvim --with-cscope --with-lua --with-override-system-vim brew linkapps ma ...

  8. fedora kde桌面系统配置

    本文向大家分享个人将fedora操作系统作为工作生活首选桌面系统的一些配置经验,系统版本与fedora最新版本保持一致,当前为fedora 25. #添加rpm源su -c 'dnf install ...

  9. linux桌面发行版简介

    本文通过MetaWeblog自动发布,原文及更新链接:https://extendswind.top/posts/technical/linux_desktop_distribution linux系 ...

随机推荐

  1. 菜鸟的MySQL学习笔记(三)

    4-1插入记录INSERT INSERT [INTO] tbl_name [(col_name)] {VALUES|VALUE} ({expr|DEFAULT},...), (...), ...   ...

  2. 一个供新手把玩的jQueryUI在线文档

    最近整理了一份jQueryUI文档,方便以后学习和运用. 把玩地址

  3. rpc远程调用开发

    RPC即远程过程调用,适用于集群管理,集群节点就是RPCServer,而我们发起远程调用的web服务器就是RPCClient.所以是少数rpcClient(可能一个)对多个RPCServer(集群节点 ...

  4. Python里隐藏的 " 诗 "

    在 Python 的Lib目录里有一个:this.Py (或者在交互式解释器中输入import this) 它其实是隐藏的一首诗 The Zen of Python, by Tim Peters &l ...

  5. 坑爹的NSIS转义符:$ (在NSIS的MessageBox中写换行文字)

    最近的项目中,发现了NSIS一个比较坑的地方:$ 不但是变量常量的开头,还是一个转义字符. 大家有没有发现,NSIS写的脚本中,如果要让弹出消息框中的文字带换行功能,“\r\n” 是不是很不管用呢? ...

  6. 阿里云centOS6 下python安装及配置、pip安装及配置、ipython安装及配置

    我是在阿里云服务器上进行的python环境搭建,阿里云服务器会自带python但是版本低,所以打算自己安装一个,期间遇到各种问题,而且百度根本不够用无奈上的外网很快解决了.在此分享一下. 一.pyth ...

  7. python面向对象高级编程

    正常情况下,当我们定义了一个class,创建了一个class的实例后,我们可以给该实例绑定任何属性和方法,这就是动态语言的灵活性.先定义class: >>> class Studen ...

  8. 在C#里实现各种窗口切换特效,多达13种特效

    原文:http://www.cnblogs.com/clayui/archive/2011/06/28/2092126.html 预览:   下载 这次clayui给大家带来了比较实用的东西,因为时间 ...

  9. uva 10652 Board Wrapping

    主要是凸包的应用: #include <cstdio> #include <cmath> #include <cstring> #include <algor ...

  10. Ecmall系统自带的分页功能

    在Ecmall的二次开发中,分页是必不可少的.这个系统已经自带了分页功能,下面来看看如何使用这个分页. 下面是一个自定义的类,用于查看订单的详细情况.关键在于get_order_data()这个方法, ...