zoukankan      html  css  js  c++  java
  • Linux下编辑利器vim,vimrc,viminfo的高级用法

    1、ci" (由 change operator 和 text-object i" 组成)

    这个命令会找到当前光标所在行的下一个 " 括起来的字符串,清除引号裏面的内容,并进入 insert mode 以方便修改
    用起来比解释起来简单,你可用 const char* hello = "Hello world."; 类似这样的代码来测试

    2、yaB (由 yank operator 和 text-object aB 组成)

    这个命令会将当前光标所在的代码块({} 括起来的内容,包括花括号本身)复制到默认 register,
    方便在其他地方用 p 贴出来(当然,写代码不鼓励 copy and paste),你可用用任何一个 {} 来测试,然后找另外一个地方 p

    3、gUiw (由 make uppercase operator 和 text-object iw 组成)

    这个命令会将当前光标所在的 word 全部变成大写
    如将 max_size 变成 MAX_SIZE

    4、进入 insert mode 编辑(进入 insert mode 别只用 i,要习惯视乎情况,使用 I a A o O s C)

    5、对齐 gg=G 快速对齐整个文件

    6、tabnew mytab 新建一个标签mytab,:tabn 跳到下一个标签,:tabp 跳到上一个标签,用gt或gT在普通模式下跳转到下一个和上一个标签

    7、切割窗口操作:split 水平方向切割一个窗口,:vsplit 竖直方向切割一个窗口,用Ctrl-w+方向键 在各个切割窗口之间切换。

    8、宏操作

    qa (将命令录制到a这个剪贴板上{vim有好多个剪贴板,比如abcdefg……})
    3x (重复三遍删除操作,将foo删掉,其实也可以用f命令来搭配,对复杂的情况更适用)
    0 (移动到行首)
    j (移动到下一行)
    q (停止录制)
    3@a (重复三遍刚才录制的命令,3就是将命令重复3遍,@就是运行,a就是刚刚保存的那个剪贴板)
    

     10、配置.vimrc

    "=========================================================================
    "Dessription: .vimrc文件,for Linux
    "Create: 2015年08月02日 15时13分
    "Email:1002643051@qq.com
    "Author:Kevin
    "=========================================================================
    
    "历史记录数
    set history=10000
    
    "显示行号
    set number
    
    "状态列的行数,预设一行,建议设成两行
    set cmdheight=3
    
    "保存全局变量,! 以大写字母开头的全局变数,并且不含有小写字母
    set viminfo+=!
    
    "让汉字以2个宽度显示
    set ambiwidth=double
    
    "Fill space between windows 在被分割的窗口间显示空白,便于阅读
    set fillchars=stl: ,stlnc: ,vert:
    
    "显示标尺 在状态行上显示光标所在位置的行号和列号
    set ruler
    set rulerformat=%20(%2*%<%f%= %m%r %3l %c %p%%%)
    
    "在状态列显示目前的模式,命令行显示vim当前模式
    set showmode
    
    "输入的命令显示出来,看的清楚些
    set showcmd
    
    "光标移动到buffer的顶部和底部时保持3行距离
    set scrolloff=3
    
    "状态行显示的内容
    set statusline=%F%m%r%h%w [FORMAT=%{&ff}] [TYPE=%Y] [POS=%l,%v][%p%%] %{strftime("%d/%m/%y - %H:%M")}
    
    "启动显示状态行(1),总是显示状态行(2)
    set laststatus=2
    
    "去掉讨厌的有关vi一致性模式,避免以前版本的一些bug和局限
    set nocompatible
    
    "启动的时候不显示那个援助索马里儿童的提示
    set shortmess=atI
    
    "代码补全
    set completeopt=preview,menu
    
    "设置当文件被改动时自动载入
    set autoread
    
    "自动把内容写回文件: 如果文件被修改过,在每个 :next、:rewind、:last、:first、:previous、:stop、:suspend、:tag、:!、:make、CTRL-] 和 CTRL-^命令时进行;用 :buffer、CTRL-O、CTRL-I、'{A-Z0-9} 或 `{A-Z0-9} 命令转到别的文件时亦然。
    set autowrite
    
    "设置魔术匹配控制,可以通过:h magic查看更详细的帮助信息
    set magic
    
    "在处理未保存或只读文件的时候,弹出确认
    set confirm
    
    "字符间插入的像素行数目
    set linespace=0
    
    "增强模式中的命令行自动完成操作
    set wildmenu
    
    "可以在buffer的任何地方使用鼠标(类似office中在工作区双击鼠标定位)
    set mouse=a
    set selection=exclusive
    set selectmode=mouse,key
    
    "通过使用: commands命令,告诉我们文件的哪一行被改变过
    set report=0
    
    "不让vim发出讨厌的滴滴声
    set noerrorbells
    
    "在执行宏命令时,不进行显示重绘;在宏命令执行完成后,一次性重绘,以便提高性能。
    set lazyredraw
    
    "===================语法======================================================
    "打开语法高亮
    syntax enable
    
    "允许按指定主题进行语法高亮,而非默认高亮主题
    syntax on
    
    "设置颜色
    colorscheme desert
    set background=dark
    color ron     " desert torte
    
    "用浅色高亮当前行
    autocmd InsertEnter * se cul
    
    "设置高亮显示当前行
    set cursorline
    
    "开启高亮光标列
    set cursorcolumn
    
    "使回格键(backspace)正常处理indent, eol, start等
    set backspace=2
    
    "允许backspace和光标键跨越行边界
    set whichwrap+=<,>,h,l
    
    "===================Tab and indent===============================================
    "不要用空格代替制表符
    set expandtab
    
    "在行和段开始处使用制表符
    set smarttab
    
    "统一缩进为4
    set shiftwidth=4
    set tabstop=4
    set softtabstop=4
    
    "设置自动缩排
    set autoindent
    
    "cindent对c语法的缩进更加智能灵活
    set cindent
    
    "比autoindent稍智能的自动缩进,在这种缩进模式中,每一行都和前一行有相同的缩进量  粘贴时候使用 set paste
    set smartindent
    
    "==============文件备份和编码===========================================================
    "不自动保存备份文件
    set nobackup
    
    "禁止生成临时文件
    set noswapfile
    
    "自动切换当前目录为当前文件所在的目录
    set autochdir
    
    "设定默认解码
    set fileencodings=utf-8
    set fileformats=unix,dos,mac
    set fenc=utf-8
    set fencs=utf-8,usc-bom,euc-jp,gb18030,gbk,gb2312,cp936
    
    "====================Text search and replace=====================================
    "高亮显示匹配的括号
    set showmatch
    
    "匹配括号高亮的时间(单位是十分之一秒)
    set matchtime=2
    
    "高亮显示查找搜索的值
    set hlsearch
    
    "在搜索时,输入的词句的逐字符高亮(类似firefox的搜索
    set incsearch
    
    "搜索时忽略大小写,但在有一个或以上大写字母时仍大小写敏感
    set ignorecase
    
    "如果搜索模式包含大写字符,不使用 'ignorecase' 选项。只有在输入搜索模式并且打开 'ignorecase' 选项时才会使用
    set smartcase
    
    "搜索时,不循环搜索
    set nowrapscan
    
    "带有如下符号的单词不要被换行分割
    set iskeyword+=_,$,@,%,#,-,.
    set helplang=cn
    set list listchars=tab:| ,trail:.,extends:>,precedes:<
    
    "状态行颜色
    highlight StatusLine guifg=SlateBlue guibg=Yellow  " 状态行颜色
    highlight StatusLineNC guifg=Gray guibg=White  " 状态行颜色
    
    "高亮字符,让其不受100列限制
    highlight OverLength ctermbg=red ctermfg=white guibg=red guifg=white
    match OverLength '\%101v.*'
    
    "与windows共享剪贴板
    set clipboard+=unnamed
    
    " 自动格式化
    set formatoptions=tcrqn
    
    "============CTags的设定  =============================================================
    let Tlist_Ctags_Cmd = '/usr/bin/ctags'
    "按照名称排序
    let Tlist_Sort_Type = "name"
    
    "在右侧显示窗口
    let Tlist_Use_Right_Window = 1
    
    "压缩方式
    let Tlist_Compart_Format = 1
    
    "如果只有一个buffer,kill窗口也kill掉buffer
    let Tlist_Exist_OnlyWindow = 1
    
    "不要关闭其他文件的tags
    let Tlist_File_Fold_Auto_Close = 0
    
    "不要显示折叠树
    let Tlist_Enable_Fold_Column = 0
    
    "不同时显示多个文件的tag,只显示当前文件的
    let Tlist_Show_One_File = 1
    "============Autocommands =============================================================
    " 只在下列文件类型被侦测到的时候显示行号,普通文本文件不显示
    if has("autocmd")
        autocmd FileType xml,html,c,cs,java,perl,shell,bash,cpp,python,vim,php,ruby set number
        autocmd FileType xml,html vmap <C-o> <ESC>'<i<!--<ESC>o<ESC>'>o-->
        autocmd FileType java,c,cpp,cs vmap <C-o> <ESC>'<o/*<ESC>'>o*/
        autocmd FileType html,text,php,vim,c,java,xml,bash,shell,perl,python setlocal textwidth=100
        autocmd Filetype html,xml,xsl source $VIMRUNTIME/plugin/closetag.vim
                     if line("'"") > 0 && line("'"") <= line("{1}quot;) |
                       exe "normal g`"" |
                     endif
    endif " has("autocmd")
    
    
    "用空格键来开关折叠
    set foldenable
    "set foldmethod=manual
    set foldmethod=syntax
    set foldlevel=100
    nnoremap <space> @=((foldclosed(line('.')) < 0) ? 'zc' : 'zo')<CR>
    
    
    "设置快捷方式 Set mapleader
    let mapleader = ","
    
    "快捷加载,当输入",ss"时,加载 .vimrc 文件
    map <silent> <leader>ss :source ~/.vimrc<cr>
    "快速打开编辑 .vimrc配置文件--->",ee"
    map <silent> <leader>ee :e ~/.vimrc<cr>
    "快速保存文件--->",w"
    map <silent> <leader>w :w<cr>
    "快速保存并退出文件--->",w"
    map <silent> <leader>wq :wq<cr>
    map <silent> <F9> :TlistToggle<cr> 
    
    "使用前导键加w来实现加速文件保存,来代替:w!加回车  
    nmap w :w!<cr>
    nmap z :x<cr>
    
    "ctages映射
    autocmd! bufwritepost .vimrc source ~/.vimrc
    
    " 高亮显示普通txt文件(需要txt.vim脚本)
    au BufRead,BufNewFile *  setfiletype txt
    
    "============自动补全 =============================================================
    
    :inoremap ( ()<ESC>i
    :inoremap ) <c-r>=ClosePair(')')<cr>
    :inoremap { {<CR>}<ESC>O
    :inoremap } <c-r>=ClosePair('}')<cr>
    :inoremap [ []<ESC>i
    :inoremap ] <c-r>=ClosePair(']')<cr>
    :inoremap " ""<ESC>i
    :inoremap ' ''<ESC>i
    
    function! ClosePair(char)
        if getline('.')[col('.') - 1] == a:char
            return "<Right>"
        else
            return a:char
        endif
    endfunction
    
    "侦测文件类型  载入文件类型插件
    filetype plugin indent on
    
    "关掉智能补全时的预览窗口
    set completeopt=longest,menu
    

    CTags安装

    http://ctags.sourceforge.net/
    tar zvxf ctags-5.6.tar.gz
    cd ctags-5.6
    ./configure
    make
    make install
    ctags -R --c++-kinds=+p --fields=+iaS --extra=+q src 
    

     CTags插件下载

    cd /usr/local/src
    wget http://www.vim.org/scripts/download_script.php?src_id=19574
    mv download_script.php?src_id=19574  vimtag.zip
    unzip vimtag.zip
    cp doc plugin ~/.vim/
    

     使用下面的命令生成帮助标签(下面的操作在vim中进行)

    :helptags ~/.vim/doc 
    :help taglist.txt 
    

     使用vundle安装插件

    https://github.com/chenpingzhao/Vundle.vim.git ~/.vim/bundle/vundle
    
    
    set rtp+=~/.vim/bundle/vundle/
    call vundle#rc()
     
    " let Vundle manage Vundle
    " required!
    Bundle 'gmarik/vundle'
    Bundle 'tpope/vim-fugitive'
    Bundle 'Lokaltog/vim-easymotion'
    Bundle 'rstacruz/sparkup', {'rtp': 'vim/'}
    Bundle 'tpope/vim-rails.git'
    Bundle 'L9'
    Bundle 'FuzzyFinder'
    Bundle 'git://git.wincent.com/command-t.git'
    
    filetype plugin indent on     " required!
    "
    " Brief help  -- 此处后面都是vundle的使用命令
    " :BundleList          - list configured bundles
    " :BundleInstall(!)    - install(update) bundles
    " :BundleSearch(!) foo - search(or refresh cache first) for foo
    " :BundleClean(!)      - confirm(or auto-approve) removal of unused bundles
    "
    " see :h vundle for more details or wiki for FAQ
    " NOTE: comments after Bundle command are not allowed.. 
    

     配置语法高亮

    :BundleInstall
    

    加入的行

    set laststatus=2
    set t_Co=256
    let g:Powerline_symbols='unicode'
    set encoding=utf8
    colorscheme desert

    其他一些常用的命令

    sudo !!  //以 root 帐户执行上一条命令
    python -m SimpleHTTPServer //利用 Python 搭建一个简单的 Web 服务器,可通过 http://$HOSTNAME:8000 访问
    :w !sudo tee % //在 Vim 中无需权限保存编辑的文件
    cd - //更改到上一次访问的目录
    ^foo^bar //将上一条命令中的 foo 替换为 bar,并执行
    cp filename{,.bak} //快速备份或复制文件
    mtr google.com //traceroute + ping
    !whatever:p //搜索命令历史,但不执行
    ssh-copy-id user@host //将 ssh keys 复制到 user@host 以启用无密码 SSH 登录
    ffmpeg -f x11grab -s wxga -r 25 -i :0.0 -sameq /tmp/out.mpg //把 Linux 桌面录制为视频

    参考

    http://easwy.com/blog/archives/advanced-vim-skills-omin-complete/comment-page-1/

    http://www.vim.org/scripts/script.php?script_id=273

    https://github.com/ma6174/vim

  • 相关阅读:
    AC日记——可能的路径 51nod 1247
    AC日记——[国家集训队2011]旅游(宋方睿) cogs 1867
    近期将要学习的内容(flag)
    Cogs 734. [网络流24题] 方格取数问题(最大闭合子图)
    Cogs 746. [网络流24题] 骑士共存(最大独立集)
    Cogs 729. [网络流24题] 圆桌聚餐
    [网络流24题]飞行员配对方案问题
    Hdu 3549 Flow Problem(最大流)
    Cogs 14. [网络流24题] 搭配飞行员(二分图匹配)
    Cogs 728. [网络流24题] 最小路径覆盖问题
  • 原文地址:https://www.cnblogs.com/chenpingzhao/p/4748338.html
Copyright © 2011-2022 走看看