Vim 笔记

Posted on December 23, 2013

安装版本7.4 http://www.fullybaked.co.uk/articles/installing-latest-vim-on-centos-from-source

安装Vundle:git clone https://github.com/gmarik/vundle.git ~/.vim/bundle/vundle

有的linux版本的vim是tiny版本,有些问题,修复:

sudo apt-get install vim-gui-common sudo apt-get install vim-runtime


Vundle

  • 安装所有插件: PluginInstall
  • 更新所有插件: PluginInstall! 或者 PluginUpdate
  • 更新指定插件: :PluginInstall! ale 将更新插件 w0rp/ale 参见Update only a single plugin

  • word查找利器, 查找光标处word

    • * 向下查找
    • # 向上查找
  • :retab 替换所有tab

  • r 单字母替换

  • c 改变(change)

    cw change word, 删除光标处word,进入插入模式

    c0 删掉光标到行首,进入插入模式

    c$ C 删掉光标到行尾,进入插入模式

    cc 删掉整行,进入插入模式

  • view 只读打开文件

  • ZZ 离开并保存 等同 :wq

  • :w new_file

    把当前修改写入新文件,保存后,当前修改的文件还是原来的文件,而且是没有保存的

  • b以单词回退移动,w 以单词前进移动,都包括标点,B/W 不包括标点

  • leader

设置:let mapleader='\'

展示当前mapleader::let mapleader Will output something like: mapleader ,

  • recording

    vim提供recording记录键盘操作到缓存,可以进行回放重复操作

    进入recording模式:在正常状态(正常状态 = !insert状态 && !visual状态)下,按q,再按下一个字母或数字,来标识将记录保存的位置。这时编辑器下边就显示“recording”了,进行记录

    完成:按一下q(在正常状态下)就完成记录了

    回放:@ 加上刚才使用的缓存按键标示

  • 命令历史和搜索历史窗口

    • 命令历史 q:
    • 搜索历史 q/
    • 在某个历史上按回车进行相应的命令或者历史
    • 在空行按回车退出该窗口
  • bomb

    • 查看是否有bomb :set bomb?
    • 设置bomb :set bomb
    • 去掉bomb :set nobomb
  • 格式化一个json文件 :%!python -m json.tool

  • 安装ctag sudo apt-get install exuberant-ctags

  • 替换

    和通常使用正则表达式有些区别, 如匹配一个以上+ 要转义\+

    如要替换掉所有的sql输出时间, 类似{1.2ms} :%s/(\d\+\.\d\+ms)//gc

    每行的行首都添加一个字符串:%s/^/要插入的字符串

    每行的行尾都添加一个字符串:%s/$/要插入的字符串

  • 为不同语言设置不同的空格设置

    vi ~/.vim/ftplugin/javascript.vim

    setlocal  tabstop=4
    setlocal  shiftwidth=4
    
  • :tabedit % 在新的tab打开当前窗口文件

  • 书签:

    • `` 上次跳转位置
    • m{a-zA-Z} 增加书签 小写的是文件书签,大写的是全局书签
    • `{a-zA-Z} 跳转到某个书签
    • :delm{marks} 删除一个书签, 例如:delma那么就删除了书签a
    • :delm! 删除全部书签
    • `. 上次修改位置
    • `^ 上次修改位置, 区别暂时没搞懂
    • :marks 暂时现有书签

vim 插件

vim-gitgutter

https://github.com/airblade/vim-gitgutter

Bundle 'airblade/vim-gitgutter'

  • 整体开关(测试有些问题) :GitGutterDisable :GitGutterEnable :GitGutterToggle

  • 高亮开关 :GitGutterLineHighlightsEnable :GitGutterLineHighlightsDisable :GitGutterLineHighlightsToggle

  • 向下查找改动处 ]h 向上查找改动处 [h

    需要配置:

      nmap ]h <Plug>GitGutterNextHunk
      nmap [h <Plug>GitGutterPrevHunk
    

Align

http://www.drchip.org/astronaut/vim/align.html

Bundle 'vim-scripts/Align'

  • 使用对齐:

    :Align 分隔符 分隔符可选,如果不传分隔符,则使用配置的分隔符,如果传了分隔符,则使用该分隔符,并且配置为当前分隔符

    作用范围:如果有选中范围,则选中范围即为作用范围,如果没有选中范围,则为光标所在代码块(空行截断代码块)

  • :AlignCtrl 展示当前对齐配置:

    • AlignStyle 对齐风格
    • Pat1 对齐分隔符
  • 控制命令:

    • AlignCtrl l 左对齐(默认)
    • AlignCtrl r 右对齐
    • AlignCtrl lr 交替左右对齐

Emmet-vim

Bundle "mattn/emmet-vim"

https://github.com/mattn/emmet-vim http://www.zfanw.com/blog/zencoding-vim-tutorial-chinese.html

现在能用到的是在html中:html:5((ctrl+y)+,)

tcomment_vim

Bundle 'tomtom/tcomment_vim'

https://github.com/tomtom/tcomment_vim

快注释,块选中后,gc 进行注释或者反注释

vim-multiple-cursors

Bundle 'terryma/vim-multiple-cursors'

https://github.com/terryma/vim-multiple-cursors

正常模式下ctrl+n 会选中当前word,继续ctrl+n 选中下一个

ctrl+p 会到上一个

ctrl+x 跳过当前一个,到下一个

vim-vroom

Bundle 'skalnik/vim-vroom'

https://github.com/skalnik/vim-vroom

在一个测试文件内:

\ + r 运行这个测试文件

\ + R 运行距离光标最近的一个测试

nerdtree-ack

https://github.com/tyok/nerdtree-ack

在Nerdtree的目录上搜索

首先安装Ack: brew install ack

Bundle 'mileszs/ack.vim' Bundle 'tyok/nerdtree-ack'

使用:在Nerdtree 的目录上

  • ms 不区分大小写搜索
  • me 区分大小写搜索

ctrlp

bundle 'kien/ctrlp.vim'

https://github.com/kien/ctrlp.vim

使用:

  • ctrl + P 打开文件名搜索器,进行文件名搜索

  • ctrl + f ctrl + b.进行模式切换:

    • file 模式:当前目录文件搜索
    • buf 模式:搜索打开的文件
    • mru: 最近打开的文件(不限于当前目录)

nerdtree

Bundle 'scrooloose/nerdtree'

    "Show hidden files in NerdTree
    let NERDTreeShowHidden=1

matchit

Bundle 'edsono/vim-matchit'

Bundle 'vim-scripts/ruby-matchit'

前者支持很多文件类型,但是在ruby文件里有个bug:

    class A
      a = { module: 'B' }
    end                   #end会和module匹配

引入第二个ruby-matchit解决了此问题

syntastic

Bundle 'scrooloose/syntastic'

"在打开文件的时候检查
let g:syntastic_check_on_open=1

vim-airline

https://github.com/vim-airline/vim-airline

使用者status line经常出现乱码或者显示异常, 主要原因是字体没有正确安装或者配置

首先需要安装字体: clonehttps://github.com/powerline/fonts, 然后执行./install.sh

如果是使用item2下的终端vim, 需要在item2配置中选择合适的字体

Plugin 'vim-airline/vim-airline' " vim-powerline 不支持ale, vim-airline支持
set laststatus=2 "始终显示状态栏
let g:airline#extensions#tabline#enabled = 1 "tab 栏
let g:airline_powerline_fonts=1

Lokaltog/vim-easymotion

https://github.com/easymotion/vim-easymotion

let mapleader=','
Plugin 'Lokaltog/vim-easymotion'
map <Leader><Leader>f <Plug>(easymotion-w)
map <Leader><Leader>j <Plug>(easymotion-j)
map <Leader><Leader>k <Plug>(easymotion-k)
map <Leader><leader>h <Plug>(easymotion-linebackward)
map <Leader><leader>l <Plug>(easymotion-lineforward)

常用:

,,s 全屏搜索 ,,f 下屏移动 ,,b 上屏移动


diepm/vim-rest-console

https://hiberabyss.github.io/2018/04/24/vim-plug-rest-console/

https://github.com/diepm/vim-rest-console

实现类 Postman 功能的 VIM 插件


my .vimrc https://github.com/zhongfox/dotfiles/blob/master/vim/vimrc.symlink


有时候需要调试vim的配置, 有些知识记录一下:

  • set 和 let的区别:

    set 是设置options, let是赋值给variable(g:打头的是全局变量)

    vim 中获取set设置的option: :echo &配置名称echo &tabstop

    获取let设置的variable: let 变量名称