vim实用操作

1 配置文件

1.1 加载顺序

系统 vimrc 文件: $VIM/vimrc

用户 vimrc 文件: $HOME/.vimrc

其各自的加载顺序可通过:scriptname来获知。

1.2 一份入门配置

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" 显示相关  
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
set shortmess=atI   " 启动的时候不显示那个援助乌干达儿童的提示  
winpos 5 5          " 设定窗口位置  
set ruler           " 显示标尺
set laststatus=1    " 启动显示状态行(1),总是显示状态行(2)  
set cursorline              " 突出显示当前行
syntax on           " 语法高亮
" 自动缩进
"set autoindent
"set cindent
" 显示行号
set number
" 统一缩进为2
set tabstop=2
set shiftwidth=2
" set softtabstop=4
" 当设置成 expandtab 时,缩进用空格来表示,noexpandtab 则是用制表符表示一个缩进。
set expandtab
set hlsearch "高亮所有匹配字符串

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" 新文件标题  
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"新建.c,.h,.sh,.java文件,自动插入文件头 
autocmd BufNewFile *.cpp,*.[ch],*.sh,*.rb,*.java,*.py exec ":call SetTitle()" 
""定义函数SetTitle,自动插入文件头 
func SetTitle() 
    "如果文件类型为.sh文件 
    if &filetype == 'sh' 
        call setline(1,"\#!/bin/bash") 
        call append(line("."), "") 
        elseif &filetype == 'python'
            call setline(1,"#!/usr/bin/env python")
            call append(line("."),"# coding=utf-8")
            call append(line(".")+1, "") 

        elseif &filetype == 'ruby'
            call setline(1,"#!/usr/bin/env ruby")
            call append(line("."),"# encoding: utf-8")
            call append(line(".")+1, "")

"    elseif &filetype == 'mkd'
"        call setline(1,"<head><meta charset=\"UTF-8\"></head>")
    else 
          call setline(1, "/*************************************************************************") 
          call append(line("."), "  > File Name: ".expand("%"))
          call append(line(".")+1, "  > Author: fsj")  
          call append(line(".")+2, "  > Created Time: ".strftime("%c")) 
          call append(line(".")+3, " ************************************************************************/") 
          call append(line(".")+4, "")
          call append(line(".")+5, "")
    endif 
    if expand("%:e") == 'cpp'
        call append(line(".")+6, "#include<iostream>")
        call append(line(".")+7, "using namespace std;")
        call append(line(".")+8, "")
    endif
    if &filetype == 'c'
        call append(line(".")+6, "#include<stdio.h>")
        call append(line(".")+7, "")
    endif
    if expand("%:e") == 'h'
        call append(line(".")+6, "#ifndef _".toupper(expand("%:r"))."_H")
        call append(line(".")+7, "#define _".toupper(expand("%:r"))."_H")
        call append(line(".")+8, "#endif")
    endif
    if &filetype == 'java'
        call append(line(".")+6,"public class ".expand("%:r"))
        call append(line(".")+7,"")
    endif
    "新建文件后,自动定位到文件末尾
endfunc 
autocmd BufNewFile * normal G

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" 键盘命令
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"新建标签  
map <M-F2> :tabnew<CR>  
"列出当前目录文件  
map <F3> :tabnew .<CR>  
"打开树状文件目录  
map <C-F3> \be  

2 编辑

i,a,r :在光标的前,后,上方插入字符命令(i=insert,a=append,r=replace)

cw,dw : 改变(置换)/删除光标所在处的单词的命令 (c=change,d=delete)
x,d$,dd :删除一个字符,光标所在处到行尾的所有字符,和整行的命令
1(待删除行)d :删除第1行,依此类推
1,10d :删除1-10行,依此类推
u(撤销操作)

yy:拷贝当前行 (nyy或者yny ,复制n行,n为数字);
y (yank): 在使用v模式选定了某一块的时候,复制选定块到缓冲区用;
p (put):命令模式下将剪切板内容插入到当前行以下
shift+insert:插入模式下将剪切板内容插入到当前位置

:%s/oldstr/newstr/g:将oldstr全局替换为newstr

http://blog.csdn.net/wallwind/article/details/7633356
http://blog.csdn.net/lanxinju/article/details/5727262

2.1 多行操作

删除列

1.光标定位到要操作的地方。
2.CTRL+v 进入“可视 块”模式,选取这一列操作多少行。
3.d 删除。

插入列
插入操作的话知识稍有区别。例如我们在每一行前都插入"() ":
1.光标定位到要操作的地方。
2.CTRL+v 进入“可视 块”模式,选取这一列操作多少行。
3.SHIFT+i(I) 输入要插入的内容。
4.ESC 按两次,会在每行的选定的区域出现插入的内容。

http://www.cnblogs.com/xiaowant/articles/1992923.html

2.2 多窗口模式

连续两次按下Ctrl+w也组合键可以实现多个窗口间的依次切换;
(在 普通模式下ctrl+w,再按一下w,可以在两个窗口之间切换)

:qa "退出所有的窗口

vim的跨文件复制粘贴:

1、用vim打开一个文件,例如:a.cpp

2、在普通模式下,输入:":sp"(不含引号)横向切分一个窗口,
或者":vsp"纵向切分一个窗口,敲入命令后,你将看到两个窗口打开的是同一个文件

3、在普通模式下,输入:":e /path/to/b.cpp",在其中一个窗口里打开另一个文件。

2.3 函数折叠

za:打开或关闭当前折叠

3 查找命令和选择

3.1 普通查找

/string, ?string :从光标所在处向后 / 向前查找相应的字符串的命令

选定文本块。使用v进入可视模式,移动光标键选定内容。

选中单词viw:它的作用是选取一个单词(word),无论光标在这个单词的哪个位置都能选中整个单词

跳到文件头: :1gg

跳到文件尾: :$G

3.2 正则查找

https://www.cnblogs.com/penseur/archive/2011/02/25/1964522.html

3.3 跳转

gg  - 到文件头
G   - 到文件尾

Ngg - 到N行
NG  -
:N  -

gi  - 返回上一次插入文本的地方。
g;  - 返回上一个修改位置
g,  - 返回下一个修改位置

gd       - 跳转到局部定义
gf       - 跳转到文件
ctrl + o - 跳转到上一位置
ctrl + i - 跳转下一位置(和ctrl + o配合在代码间跳转)
ctrl + ]
ctrl + t

ref: http://mapan1984.github.io/tool/2016/04/22/Vim-移动跳转/

4 插件管理

pathogen 和 Vunble 都通过 ~/.vim/bundle文件夹管理一个,选一个管理器就好了。

这里使用Vunble,文档地址 https://github.com/VundleVim/Vundle.vim/blob/master/README_ZH_CN.md

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

修改~/.vimrc

set nocompatible               "去除VIM一致性,必须"
filetype off                   "必须"

"设置包括vundle和初始化相关的运行时路径"
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()

"启用vundle管理插件,必须"
Plugin 'VundleVim/Vundle.vim'

"在此增加其他插件,安装的插件需要放在vundle#begin和vundle#end之间"
"安装github上的插件格式为 Plugin '用户名/插件仓库名'"
" vim自动补全的插件
Plugin 'tpope/vim-sensible'
Plugin 'Valloric/YouCompleteMe'
Plugin 'SirVer/ultisnips'
Plugin 'honza/vim-snippets'
Plugin 'scrooloose/nerdtree'
Plugin 'scrooloose/nerdcommenter'
Plugin 'majutsushi/tagbar'
Plugin 'kien/ctrlp.vim'
Plugin 'rking/ag.vim'
Plugin 'vim-scripts/TaskList.vim'
Plugin 'nacitar/a.vim'
Plugin 'altercation/vim-colors-solarized'
Plugin 'bronson/vim-trailing-whitespace'
Plugin 'fannheyward/rainbow_parentheses.vim'
Plugin 'vim-scripts/loremipsum'
Plugin 'tpope/vim-surround'
Plugin 'tpope/vim-repeat'
Plugin 'dyng/ctrlsf.vim'
Plugin 'mhinz/vim-startify'
Plugin 'fatih/vim-go'
Plugin 'bling/vim-airline'
Plugin 'kana/vim-textobj-user'
Plugin 'glts/vim-textobj-comment'
Plugin 'Julian/vim-textobj-brace'
Plugin 'kana/vim-smartword'
Plugin 'derekwyatt/vim-scala'

call vundle#end()              
filetype plugin indent on "加载vim自带和插件相应的语法和文件类型相关脚本,必须"

设置好 Vundle 和 .vimrc 以后,在运行 vim 的时候就需要键入:BundleInstall 就可以自动安装需要的包文件了

4.1 vim-go

插件安装后,打开任意一个go文件,vim命令模式下:GoInstallBinaries 会把缺失的二进制自动下载到$GOHOME/bin

5 vim的升级

macos:

brew search vim
brew info vim # 查看版本等详情
brew install vim --with-lua --with-override-system-vi # 安装

References

  1. 简明Vim练级攻略
  2. Vim插件管理器Pathogen和Vundle简介
posted @ 2017-05-18 23:51  畑鹿驚  阅读(673)  评论(1编辑  收藏  举报