vim学习笔记

打开vim时指定打开多个文件,而且垂直分割窗口:
    vim -O file1.c file2.c
水平打开则是:
    vim -o file1.c file2.c


如果一开始只有file1.c独占一个窗口,想垂直打开另一个,则:
    vs file2.c
同理,如果想水平打开另一个文件:则:
    sp file2.c
如果单单输入sp或者vs也是可以的,只是这时是一个文件被分成多个窗口


已经打开了多个窗口,想调整各个窗口的大小,使用res命令,高度调节:
    res +12
    res -12
宽度调节:
    vertical res +12
    vertical res -12

查看当前文件名和当前位置:ctrl + g 或者 :f

查看当前光标下的符号的下/上个出现的地方:先按shift + 8 再按n和N上下寻找

获取某个插件的帮助文档(拿taglist来说):
:help taglist

换主题:
:colorscheme <空格+tab>
找到自己喜欢的然后按回车
上面讲的只是临时设置,永久设置方法如下:
在~/.vimrc中添加colorscheme morning
添加主题的方法:
1、创建~/.vim/colors目录
2、去网上找别人写好的,或者自己写一个主题文件,以.vim为后缀,放在上面讲的那个目录
3、在~/.vimrc中添加colorscheme <你自己的主题>


重复上次操作:.


查看命令历史,或者想输入上条命令:
    在普通模式下直接按"q",然后按":"


撤销:u
重来:ctrl + r


vundle使用
==========

vundle是一个vim下的一个插件管理器(vim本身没有插件管理器),它本身也是一个插件。
有了它,你只要在.vimrc文件中写入你想要的插件名它就会帮你安装插件,你删除插件名它就会帮你卸载掉,比手动维护方便得多。
项目地址:
https://github.com/gmarik/Vundle.vim.git
或者:
https://github.com/VundleVim/Vundle.vim.git
两个都是一样的库

安装:
1. git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim
2. 把下面这段文本(这只是个示例文件)写入你的$HOME/.vimrc文件
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
set nocompatible              " be iMproved, required
filetype off                  " required

" set the runtime path to include Vundle and initialize
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
" alternatively, pass a path where Vundle should install plugins
"call vundle#begin('~/some/path/here')

" let Vundle manage Vundle, required
Plugin 'VundleVim/Vundle.vim'

" The following are examples of different formats supported.
" Keep Plugin commands between vundle#begin/end.
" plugin on GitHub repo
Plugin 'tpope/vim-fugitive'
" plugin from http://vim-scripts.org/vim/scripts.html
" Plugin 'L9'
" Git plugin not hosted on GitHub
Plugin 'git://git.wincent.com/command-t.git'
" git repos on your local machine (i.e. when working on your own plugin)
Plugin 'file:///home/gmarik/path/to/plugin'
" The sparkup vim script is in a subdirectory of this repo called vim.
" Pass the path to set the runtimepath properly.
Plugin 'rstacruz/sparkup', {'rtp': 'vim/'}
" Install L9 and avoid a Naming conflict if you've already installed a
" different version somewhere else.
" Plugin 'ascenator/L9', {'name': 'newL9'}

" All of your Plugins must be added before the following line
call vundle#end()            " required
filetype plugin indent on    " required
" To ignore plugin indent changes, instead use:
"filetype plugin on
"
" Brief help
" :PluginList       - lists configured plugins
" :PluginInstall    - installs plugins; append `!` to update or just :PluginUpdate
" :PluginSearch foo - searches for foo; append `!` to refresh local cache
" :PluginClean      - confirms removal of unused plugins; append `!` to auto-approve removal
"
" see :h vundle for more details or wiki for FAQ
" Put your non-Plugin stuff after this line
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
3. 进入vim,然后运行":PluginInstall"

可能遇到的问题及解决办法:
问题:在vim中输入":PluginInstall"提示"E492 Not an editor command"
办法:"PluginInstall"这个命令本来就不是vim的原生命令,它来自vundle,既然vim不能识别,很有可能是vim没能识别到vundle。
      你可能把~/.vimrc文件做成/etc/vimrc或者别的什么了,得改成~/.vimrc,因为这个插件不支持全局配置

问题:切到root用户后原来的vimrc不起作用了
办法:你换用户了,这意味着"~/"目录发生了变化,所以你得重装一次vundle,重新设置一份.vimrc文件,当然你必须全程保持是root用户


使用vundle删除插件
================
    :PluginList
    光标定位到你想删除的插件,按shift+d
    重新编辑.vimrc,把刚刚删除的那个插件的相关项删除


vundle插件库
============
    网上很多,一个好用的是:vimawesome.com/


ctags使用
=========

ctags不是vim的插件,是一个独立的程序,用来生成代码索引库的

安装:sudo apt-get install ctags

使用前必须生成数据库:ctags -R

符号跳转:ctrl + ]
符号跳转不包括局部变量,想要查看局部变量,可以这样输入:gd(先按g,再按d)

~/.vimrc设置:
set tags=~/path/tags
set tags=tags;
set autochdir


taglist使用
===========

安装(vundle作为插件管理器):在~/.vimrc中添加:Plugin 'taglist.vim',然后在vim界面中执行:PluginInstall,等待安装完成

<Space>       显示光标下tag的原型定义
u             更新taglist窗口中的tag
s             更改排序方式,在按名字排序和按出现顺序排序间切换
x             taglist窗口放大和缩小,方便查看较长的tag


~/.vimrc设置:
map <f3> :TlistToggle<CR>
let Tlist_Use_Right_Window=1   " taglist is in the right side
let Tlist_Exit_OnlyWindow=1    " if taglist is the last windown, quit vim
let Tlist_WinWidth=35
let Tlist_Show_One_File=1      " don't show several files' taglist, just show current one


airline使用
===========

airline可以在vim的界面下部显示一个状态栏,它同时还集成了很多其他的插件

安装(vundle作为插件管理器):在~/.vimrc中添加:
    Plugin 'vim-airline/vim-airline'
    Plugin 'vim-airline/vim-airline-themes'
然后在vim界面中执行:PluginInstall,等待安装完成


cscope使用
==========

我不怎么喜欢cscope,讲得简单点,cscope和ctag都不全面,得两个都用,两个都用也还是不好用,比不过eclipse

cscope不是vim的插件,它是一个独立的程序,vim编译(一般默认是使能的)的时候也要支持cscope才能跟cscope联动

安装:
1、vim必须在编译时就有加上--cscope(好像是这个),如果vim没有,就要卸载,加上那个选项重新编译安装
2、sudo apt-get install cscope


使用:
1、在源码目录下执行cscope -Rbk生成数据库cscope.out文件
2、输入这个语句让cscope索引你想要的文件格式:find . -name "*.h" -o -name "*.c" -o -name "*.S" >> cscope.files
3、在vim中输入cs add cscope.out
4、在vim中用光标悬停在一个符号的某个字符上,然后按ctrl + 空格,放开后再按s,找到相关引用。除了这
   个快捷键,还有很多,具体都在~/.vim/plugin/cscope_map.vim里面,这是cscope自己生成的vim配置文件
   一般不用改

注意:vim系统设置set autochdir会导致cscope不能进入子目录,所以如果使用cscope,就不能有这项


~/.vimrc相关配置:
map <F5> :!cscope -Rbk<CR>


nerd-tree使用
=============

这是一个文件浏览器插件

安装(vundle作为插件管理器):
    在~/.vimrc中添加:Plugin 'scrooloose/nerdtree'
    然后在vim中输入:PluginInstall

~/.vimrc相关配置:
    autocmd StdinReadPre * let s:std_in=1
    map <F2> :NERDTreeToggle<CR>


选定一个单词
============

    先按v,再按下面任一命令

    aw     a word
    iw     inner word
    aW     a WORD
    iW     inner WORD
    as     a sentence
    is     inner sentence
    ap     a paragraph
    ip     inner paragraph
    a[|]   a[] block (这里的'|'是或的意思,也就是说'a['和'a]'都表示一个[]块)'{} &al;>()与[]作用类似
    at     a  tag (这里的tag可以是html或xml中任何标签对)
    it     inner tag

删除行尾空格
============
    vim查看模式下输入':',然后输入'%s/\s\+$//g'


查找和替换
=========
    :[range]s/from/to/[option]

    range
        "1,n": 表示从第1行到n行
        "%":   表示整个文件,同"1,$"
        ".,$": 表示从当前行到文件尾
        空:    表示当前行

    option
        g       表示整个文件
        n       表示只查找不替换
        i       表示忽略大小写
        c       表示逐个确认替换
        空       表示仅对每行第一个匹配串进行替换

    from
        匹配字符串,可以是正则表达式

    to
        替换字符串,不能是正则表达式


    例子
    ====
        :%s/hello//gn        # 统计当前文件所有的hello的个数
        %s/a$/a \\/g        # 在当前文件所有的以a结尾的字符串的后面加上' \'


解决粘贴代码时乱缩进的问题
=========================
    粘贴前输入":set paste"
    粘贴后输入":set nopaste"


vim切回终端(vim与shell交互)
===========================
    vim按ctrl+z切到终端
    终端按fg切回vim


刷新文件
=======
    :e

quickfix
=========
        quickfix是一个特殊的vim窗口,它使得vim能像IDE一样,显示编译结果和查询结果
        不管是显示编译结果还是查询结果,只需要在make或者vimgrep之后输入cw即可打开quickfix,cn和cp分别是下一项和上一项,ccl是关闭quickfix


vim内部执行make
============================
    1. :set makeprg=mingw32-make        " 设置你的make程序,如果有空格要加\转义符
    2. :make
    3. cc                    " 查看详细错误


查看vim的版本,安装了哪些功能,vimrc的位置
=======================================
    :version
    或者
    vim --version

ubuntu彻底卸载vim
=================
    sudo apt-get remove vim
    sudo apt-get remove vim-runtime
    sudo apt-get remove vim-tiny
    sudo apt-get remove vim-common
    sudo apt-get remove vim-doc
    sudo apt-get remove vim-scripts


编译安装VIM
===========
    1. sudo apt-get install libncurses5-dev python-ubuntuone-devtools python3-all-dev   # 安装必要软件
    2. 下载VIM源码
    3. ./configure --with-features=huge \
        --enable-multibyte \
        --enable-rubyinterp=yes \
        --enable-python3interp=yes \
        --with-python-config-dir=/usr/lib/python3.7/config-3.7m-x86_64-linux-gnu \
        --enable-perlinterp=yes \
        --enable-luainterp=yes \
        --enable-gui=gtk2 \
        --enable-cscope \
        --prefix=/usr/local \
        --with-x
        注意:
            "--with-python-config-dir"得换成你自己的目录
            "--with-x"大概是使能X11的意思。我要的是它的clipboard功能,有了它VIM才能复制内容到系统剪贴板
    4. make
    5. sudo make install
    可能会遇到的问题:
        * configure说python3的cache有问题。---> sudo make distclean
        * 如果--with-x编译不成功,安装X11:apt-get install libX11-dev libXext-dev libXtst-dev libXrender-dev libxmu-dev libxmuu-dev
        * 明明使能了clipboard功能,但是:reg没看到"+这个寄存器,复制到系统剪贴板也没用。可能原因:你的X11授权有问题,比如你是root,但是X11只允许你的ubuntu
          中一个非root用户访问,比如sam。解决办法:cp /home/sam/.Xauthority /root

vim复制到系统剪贴板
===================
    首先确保你的vim使能了clipboard功能
        vim --version | grep "clipboard"
    如果没有,重新编译vim,加上--with-x

    复制:"+y
    粘贴:"+p

    引申:
        输入:reg可以看到vim有很多剪贴板。其中""是默认剪贴板,"+是系统剪贴板。y和p这两个命令之前加上剪贴板的名字就可以指定剪贴板

gvim去掉烦人的un~文件
=================
    在gvim的安装目录找到vimrc_example.vim文件,把下面两行(else 和 set...)注释掉:
    if has("vms")
    set nobackup " do not keep a backup file, use versions instead
    " else
    " set backup " keep a backup file

查找字符串
==========
    使用vim自带的vimgrep(不好用,速度又慢)
    ====================================
        :vim /xxx/gj **             " xxx即是你想要查找的字符串
                                    " g指的是如果一行有多个匹配那每个匹配都显示,如果没有g,那么一行中的多个匹配只算一个
                                    " j指的是查找结束后不要跳转到第一个匹配,如果没有j,就跳转到第一个匹配
                                    " **代表当前目录和所有子目录;*是当前目录;**/*是仅子目录;*.c是当前目录所有c文件;%代表当前文件;
        :cw                         " 打开quickfix窗口查看所有匹配
        :ccl                        " 关闭quickfix窗口


    使用Leaderf插件
    ==============
        vundle安装:Plugin 'Yggdroot/LeaderF'
        需要安装依赖:rg(ripgrep):
            curl -LO https://github.com/BurntSushi/ripgrep/releases/download/11.0.2/ripgrep_11.0.2_amd64.deb
            sudo dpkg -i ripgrep_11.0.2_amd64.deb
        使用:
            * 输入:Leaderf[File][ rg]查找文件和匹配项,ctrl+{J,K}上下选择匹配项,enter跳转到匹配项
            * 进入Leaderf查到东西以后按tab可以让Leaderf窗口停在vim里面,你可以把它当普通窗口一样对待,按j,k移动,p预览, F1获取帮助


vim的配置文件
============
    输入:version可以查看vim的配置文件的位置,要注意的是:~/_vimrc即使没说也是默认的gvim和vim的配置文件


vim改文件编码
=============
    :set fileencodings=utf-8,gbk        " 除了utf-8和gbk,你还可以输入更多,或者只输入一个也行
    :e                                  " 改完编码别忘了刷新,不然还是老样子。当然了,如果你把set fileencodings=xxx放到vimrc就不用刷新了


回到之前的目录(使用NERDTree)
============================
    图1
    ===========================================
    " Press ? for help             |  1
                                   |~
    .. (up a dir)                  |~
    /e/code_pool/table/            |~
      Makefile                     |~
      README.txt                   |~
      table.c                      |~
      table.h                      |~
      TODO.txt

    图2
    ===========================================
    " Press ? for help             |  1
                                   |~
    .. (up a dir)                  |~
    /e/code_pool/                  |~
    + awtk/                        |~
    + busybox-1.31.1/              |~
    + ECG2.0_new/                  |~
    + emWinAllStuff/               |~
    + fft-c/                       |~
    + fftw-3.3.8/                  |~
    + gear-lib/                    |~
    + gsl-2.2.1/                   |~
    + kiss_fft130/                 |~
    + kkk/                         |~
    + linux-4.13.12/               |~
    + linux-stm32/                 |~
    + PracticeOfemWin/             |~
    + PracticeOfSTM32F429DiSC/     |~
    + qt_chart_practice/           |~
    + table/                       |~

    图3
    ===========================================
    " Press ? for help             |  1
                                   |~
    .. (up a dir)                  |~
    /e/code_pool/                  |~
    + awtk/                        |~
    + busybox-1.31.1/              |~
    + ECG2.0_new/                  |~
    + emWinAllStuff/               |~
    + fft-c/                       |~
    + fftw-3.3.8/                  |~
    + gear-lib/                    |~
    + gsl-2.2.1/                   |~
    + kiss_fft130/                 |~
    + kkk/                         |~
    + linux-4.13.12/               |~
    + linux-stm32/                 |~
    + PracticeOfemWin/             |~
    + PracticeOfSTM32F429DiSC/     |~
    + qt_chart_practice/           |~
    ~ table/                       |~
        Makefile                   |~
        README.txt                 |~
        table.c                    |~
        table.h                    |~
        TODO.txt                   |~

    如图1,一开始你位于'/e/code_pool/table/'目录,然后你点了'.. (up a dir)'键,去到上层目录,也就是'/e/code_pool/'目录,如图2。
    此时你按下'table'文件夹,想回到'/e/code_pool/table/'目录,却发现NERDTree的显示不同了,如图3。
    那么,怎样让目录树显示跟以前一样呢?光标移到'table'文件夹,按下'C'即可。

    一些NERDTree的其他常用键
    ======================
        r       刷新目录树
        O       展开光标指定目录下的所有子目录
        X       折叠光标指定目录下的所有子目录
        m       打开功能菜单
        I       打开或关闭隐藏文件的显示
        F       显示或不显示文件


窗口
====
    ctrl+w [h,j,k,l]        移动焦点到上下左右窗口
    ctrl+w x                交换上下左右窗口


编辑二进制文件
=============
    vim -b file.bin             " -b是以二进制打开的意思
    :%!xxd
    编辑十六进制部分和地址部分,注意地址部分要严格按照顺序递增
    此时先不保存,输入:%!xxd -r把文本转成16进制
    :wq

    * 推荐使用'https://vimawesome.com/plugin/hexmode'这款插件,它也是用的xxd,但是做了一些封装,使用更方便:
      $ vim -b file.bin     # 用-b选项打开bin文件会触发hexmode插件,一进去就是16进制编辑
      $ # 如下所示,vim编辑16进制的界面是这样的:
            00000000: 00 88 99 aa bb 55 66 77  .....Ufw
            00000008: aa bb cc dd ee ff 01 02  ........
            00000010: 00 01 02 03 04 05 06 07  ........
        # 从左到右分为三部分,分别是地址部分,数据部分和转义部分
        # 把数据部分改好后检查地址部分,必须是16进制格式且连续递增(递增+8还是+1取决于xxd 的-c -g配置。上面这个是+8的)(可以不用补零对齐)
        # 最右边的转义部分改不改无所谓,建议删了
      $ vim保存退出即可

    * vim编辑16进制文件最麻烦的就是改地址,地址错了整个文件就废了。现在无论是vim自带的xxd还是插件,我没找到一个可以自动改地址的。
      倒是有一个插件:'https://vimawesome.com/plugin/visincr',它可以把一整列数据按顺序递增或者递减。所以可以用它来配合vim:编辑完数据
      后用它来修改所有的地址(地址不需要补零对齐)。方法是:ctrl+v选中一列,输入:IIX命令即可

    * 无论是vim自带的xxd还是插件,我没找到一个可以根据光标位置自动高亮右边的转义部分的,这是vim不如GUI编辑器的一个地方

自动生成一列连续数字
==================
    这个插件'https://vimawesome.com/plugin/visincr'使vim能像Excel那样,用一个命令可以使一整列填满一串连续数字。支持10进制,8进制,16进制和日期


删除包含特定字符的行(匹配删除)
==============================
    比如带有abc的行
    :% g/abc/d

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值