4.Vim配置和使用

VI三大模式和基本命令

  • 命令模式
//切换到输入模式
i  //进入插入状态(按下i ,并不会输入一个字符,而被当作一个命令insert)
   //再输入字符,会插入在光标前
a  //进入追加状态(再输入字符,会追加在光标后)
o  //进入新一行输入状态(再输入字符,会在新一行输入)
   
//移动光标
     k 上 
h 前       l 后 
     j 下
     
r  //取代光标处的字符
x  //删除当前光标所在处的字符。

//打开默认的模式
ctrl + f  //下翻页
ctrl + b  //上翻页 
gg        //跳到第一行
shift + g //跳到最后一行

yy        //复制一行
v + h/j/k/l  //选取字符串
y         //复制
p         //粘贴 

dd        //删除一整行
ndd       //3dd: 删除3行

u         //撤销,复原前一个动作
Ctrl+r    //反撤销,回退到修改前状态

i   //命令模式切换到编辑模式,直接按键盘上的i,出现INSERT 
:   //命令模式切换到底行模式(即可在最底一行输入命令)   
  • 编辑模式

    编辑模式我们可以在这个模式上输入一些文本。

Esc //切换到命令模式
  • 底行模式
:w  //写入 
:q  //退出 
:wq //写入并退出
:q! //不保存退出
    
/word  //搜索字符串 word
       // n: 查找下一个  shift + n: 查找上一个 

:set nu //显示行号    
:set nu! //隐藏行号   
:30   //光标跳到第30行
 
Backspace //取消底行字符后,自动切换到命令模式	

源码跟踪(挑战):vim + cscope + ctags

高效跟踪源码,是程序员 快速查bug 写程序的利器

vim:是vi的升级版,加了一些高亮显示和改进,如u可以无限撤销。

ctags cscope:帮助多个源文件间建立符号索引库(如跳到函数定义,查找函数的文件位置)

安装

$ sudo apt-get install vim  ctags cscope
$ cd ~/linux-4.9.140  //进入源码目录   
$ ctags   -R    //生成符号关联  
$ cscope -Rbkq  //生成索引库

VIM配置

$ vim ~/.vimrc   添加vim 的配置文件
"-------------------------------------------------------------------------------  
"           基本设置  
"-------------------------------------------------------------------------------  
" When started as "evim", evim.vim will already have done these settings.  
if v:progname =~? "evim"  
  finish  
endif   
  
"启用Vim的特性,而不是Vi的(必须放到配置的最前边)  
set nocompatible  
  
" 设置编码    
set encoding=utf-8    
set fenc=utf-8    
set fileencodings=ucs-bom,utf-8,cp936,gb2312,gb18030,big5   
   
"显示行号  
set number  
  
"设置默认打开窗口大小  
"set lines=70 columns=100  
  
"设置窗口透明度  
"set transparency=10  
  
"设置背景色  
"set bg=dark  
  
"用 koehler 调色板  
colorscheme koehler  
  
"隐藏工具栏和滑动条  
set guioptions=aAce      
            
"设置标签栏  
"最多30个标签  
set tabpagemax=30   
"显示标签栏    
set showtabline=2     
       
  
"设定文件浏览器目录为当前目录  
"set bsdir=buffer  
"set autochdir  
  
"保存100条命令历史记录  
set history=100   
      
"总是在窗口右下角显示光标的位置  
set ruler     
      
"在Vim窗口右下角显示未完成的命令   
set showcmd           
  
" 启用鼠标  
if has('mouse')  
  set mouse-=a  
endif  
  
"设置语法高亮  
if &t_Co > 2 || has("gui_running")  
syntax on  
endif  
  
  
"-------------------------------------------------------------------------------  
"           文本操作设置  
"-------------------------------------------------------------------------------  
"设置字体  
set gfn=Courier:h15  
  
"设置自动缩进  
"设置智能缩进  
set tabstop=4  
set shiftwidth=4  
set softtabstop=4  
set expandtab  
set smarttab  
  
  
"设置Tab键跟行尾符显示出来  
"set list lcs=tab:>-,trail:-  
  
"设置自动换行  
set wrap  
  
"设置Insert模式和Normal模式下Left和Right箭头键左右移动可以超出当前行  
set whichwrap=b,s,<,>,[,]  
  
"设置光标移动到屏幕之外时,自动向右滚动10个字符  
set sidescroll=10  
  
"设置使~命令成为操作符命令,从而使~命令可以跟光标移动命令组合使用  
set tildeop  
  
"在Insert模式下,设置Backspace键如何删除光标前边的字符。这里三个值分别表示空白字符,分行符和插入模式之前的字符。  
set backspace=indent,eol,start  
  
"定义键映射,不使用Q命令启动Ex模式,令Q命令完成gq命令的功能---即文本格式化。  
map Q gq  
  
" CTRL-U 在Insert模式下可以删除当前光标所在行所在列之前的所有字符.  Insert模式下,在Enter换行之后,可以立即使用CTRL-U命令删除换行符。  
inoremap <C-U> <C-G>u<C-U>  
  
"使 "p" 命令在Visual模式下用拷贝的字符覆盖被选中的字符。  
vnoremap p <Esc>:let current_reg = @"<CR>gvs<C-R>=current_reg<CR><Esc>  
  
  
"-------------------------------------------------------------------------------  
"           搜索设置  
"-------------------------------------------------------------------------------  
"打开搜索高亮  
set hlsearch  
  
"忽略大小写  
set ignorecase  
  
"在查找时输入字符过程中就高亮显示匹配点。然后回车跳到该匹配点。  
set incsearch     
  
"设置查找到文件尾部后折返开头或查找到开头后折返尾部。  
set wrapscan  
  
  
"put ctrl+shift+- s for find string
nmap <C-_>s :cs find s <C-R>=expand("<cword>")<CR><CR>
nmap <C-_>g :cs find g <C-R>=expand("<cword>")<CR><CR>
nmap <C-_>c :cs find c <C-R>=expand("<cword>")<CR><CR>
nmap <C-_>t :cs find t <C-R>=expand("<cword>")<CR><CR>
nmap <C-_>e :cs find e <C-R>=expand("<cword>")<CR><CR>
nmap <C-_>f :cs find f <C-R>=expand("<cfile>")<CR><CR>
nmap <C-_>i :cs find i ^<C-R>=expand("<cfile>")<CR>$<CR>
nmap <C-_>d :cs find d <C-R>=expand("<cword>")<CR><CR>  
"auto add cscope.out to vim   如:cs f s 命令不能用   
cs add cscope.out
set csto:0
set cscopetag
set nocsverb
set csverb
"添加内核目录,让你在任意文件下搜索时,都能跳到内核信息
"cs add /home/jetbot/kernel/cscope.out  /home/jetbot/kernel/
"set tags:./tags,tags,/home/jetbot/kernel/tags  
  
"-------------------------------------------------------------------------------  
"           文件设置  
"-------------------------------------------------------------------------------  
  
"设置当Vim覆盖一个文件的时候保持一个备份文件,但vms除外(vms会自动备份。备份文件的名称是在原来的文件名上加上 "~" 字符  
if has("vms")  
  set nobackup         
else  
  set backup          
endif  
 
"Enter换行时总是使用与前一行的缩进等自动缩进。  
set autoindent  
"设置智能缩进  
set smartindent         
 
"编辑一个文件时,你所编辑的内容没保存的情况下,可以把现在的文件内容与编辑之前的文件内容进行对比,不同的内容将高亮显示  
if !exists(":DiffOrig")  
  command DiffOrig vert new | set bt=nofile | r ++edit # | 0d_ | diffthis  
          \ | wincmd p | diffthis  
endif 

vim常用命令

*vim 编辑器移动光标

命令模式下

K   //向上移动 
J   //向下移动 
H   //向左移动 
L   //向右移动 
Ctrl+F(PageDown)//下翻一屏 
Ctrl+B(PageUp)  //上翻一屏
gg  //将光标定位到第一行 
G   //将光标定位到最后一行 
ngg //将光标定位到第 n 行

*vim 编辑器的文本的复制和粘贴

先将光标放在我们要复制内容的行首,使用上下左右按键来选择文字,选择好之后按键盘上的 Y,接
着按 esc 键回到一般模式,把光标移动到我们要粘贴的地方,然后按键盘上的 p

v + h/j/k/l  //选取字符串
y            //复制
p            //粘贴 
yy           //复制一行 
nyy          //复制当前行下的 n 行

*vim 编辑器的删除

方法一:直接进到编辑模式,使用 delete 来删除

方法二:使用 dd 命令

dd           //删除光标所在行 
ndd          //删除 n 行 
n1,n2d       //删除指定范围的行。需要在命令行模式下操作。

*vim 编辑器的撤销

撤销是在一般模式下,而且我们关闭过的文本文件就不能在这做撤销动作了

u            //撤销
ctrl+r       //反撤销

*vim 编辑器的查找

在命令行模式下输入 “/” 或者 “?” 来查找的。

向下查找就是点击键盘上的“n”,他会向下查找了,按 ESC 回到一般模式,然后输入“?”,然后再
输入 da,敲下回车,然后按 n,他就会向上查找,所以说我们想要向上查找的话,我们使用“?”进到命 令行模式。

/xxx     n   //向下查找xxx,shift + n: 查找上一个
?xxx     n   //向上查找xxx

*vim 编辑器的暂停和返回

Ctrl+Z       //暂停当前Vim回到Linux页面
fg+enter     //回到中断的程序页面

vim 编辑器的替换

命令行模式

%s /old/new/g

vim编辑器的保存

:q!         //强行退出 
:wq         //保存退出 
:q          //退出没有编辑过的文本

vim 编辑器文件的对比

vimdiff file1 file2 file3

vim + cscope + ctags常用命令

Ctrl + ]  //调到定义处
Ctrl + o  //返回上一次位置
          //Ctrl + i  再返回
g f	      //跳到光标停留的include的头文件里	
d w       //删除个字符串
u         //可无限撤销
:cs f f driver.c   //搜索 driver.c 文件
g d       //选中当前光标处的字符串
          //再 n  查找下一个	
ctrl shift  -  s   //查找光标处的字符串
                   // j:下一条  k:上一条  f:下一页  b:上一页  shift+g: 到末尾
:cs f s attach     //全局 搜索字符串 attach        
Ctrl+w v  //  垂直分割窗口
          //  Ctrl+w w 可在窗口间切换
          //  :q退出光标所在窗口
ctrl +    //变大字体
:e  .     //编辑当前目录

更多推荐

【嵌入式Linux环境搭建-04】Vim配置和使用