zoukankan      html  css  js  c++  java
  • 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> e  
    
    

    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简介
  • 相关阅读:
    第2章 创建基础框架
    目录
    工厂方法模式(Factory Method)
    petshop4.0 详解之七(PetShop表示层设计)
    第1章 启动电子商务网站
    第3章 创建商品目录:第Ⅰ部分
    编写一个JAVA应用程序,用户从键盘只能输入整数,程序输出这些整数的乘积
    书上例题练习第一章
    java与C/C++的区别
    安装JDK遇到的问题
  • 原文地址:https://www.cnblogs.com/lawlietfans/p/6876240.html
Copyright © 2011-2022 走看看