2024年vim的使用

vim的使用1 我的 vim 配置 1

1. 我的vim配置


  1 "======================================================                                                                                                                   
  2 " 我的vimrc 配置                                                                                                                                                          
  3 "======================================================                                                                                                                   
  4 set helplang=cn                                                                                                                                                           
  5 set tags=tags                                                                                                                                                             
  6 cs add ./cscope.out /home/sundh/temp                                                                                                                                      
  7                                                                                                                                                                           
  8                                                                                                                                                                           
  9 set nocompatible            " 关闭 vi 兼容模式                                                                                                                            
 10 syntax on                   " 自动语法高亮                                                                                                                                
 11 colorscheme molokai         " 设定配色方案                                                                                                                                
 12 set number                  " 显示行号                                                                                                                                    
 13 set cursorline              " 突出显示当前行                                                                                                                              
 14 set ruler                   " 打开状态栏标尺                                                                                                                              
 15 set shiftwidth=4            " 设定 << 和 >> 命令移动时的宽度为 4                                                                                                          
 16 set softtabstop=4           " 使得按退格键时可以一次删掉 4 个空格                                                                                                         
 17 set tabstop=4               " 设定 tab 长度为 4                                                                                                                           
 18 set nobackup                " 覆盖文件时不备份                                                                                                                            
 19 set autochdir               " 自动切换当前目录为当前文件所在的目录                                                                                                        
 20 filetype plugin indent on   " 开启插件                                                                                                                                    
 21 set backupcopy=yes          " 设置备份时的行为为覆盖                                                                                                                      
 22 set ignorecase smartcase    " 搜索时忽略大小写,但在有一个或以上大写字母时仍保持对大小写敏感                                                                              
 23 set nowrapscan              " 禁止在搜索到文件两端时重新搜索                                                                                                              
 24 set incsearch               " 输入搜索内容时就显示搜索结果                                                                                                                
 25 set hlsearch                " 搜索时高亮显示被找到的文本                                                                                                                  
 26 set noerrorbells            " 关闭错误信息响铃                                                                                                                            
 27 set novisualbell            " 关闭使用可视响铃代替呼叫                                                                                                                    
 28 set t_vb=                   " 置空错误铃声的终端代码                                                                                                                      
 29 " set showmatch               " 插入括号时,短暂地跳转到匹配的对应括号                                                                                                    
 30 " set matchtime=2             " 短暂跳转到匹配括号的时间                                                                                                                  
 31 set magic                   " 设置魔术                                                                                                                                    
 32 set hidden                 " 允许在有未保存的修改时切换缓冲区,此时的修改由 vim 负责保存                                                                                  
 33 set guioptions-=T           " 隐藏工具栏                                                                                                                                  
 34 set guioptions-=m           " 隐藏菜单栏                                                                                                                                  
 35 set smartindent             " 开启新行时使用智能自动缩进                                                                                                                  
 36 set backspace=indent,eol,start                                                                                                                                            
 37                             " 不设定在插入状态无法用退格键和 Delete 键删除回车符                                                                                          
 38 set cmdheight=1              " 设定命令行的行数为 1                                                                                                                       
 39 set laststatus=2            " 显示状态栏 (默认值为 1, 无法显示状态栏)                                                                                                     
 40 set statusline=\ %<%F[%1*%M%*%n%R%H]%=\ %y\ %0(%{&fileformat}\ %{&encoding}\ %c:%l/%L%)\    "设置在状态栏显示的信息                                                       
 41 set foldenable              " 开始折叠                                                                                                                                    
 42 set foldmethod=syntax       " 设置语法折叠                                                                                                                                
 43 set foldcolumn=0            " 设置折叠区域的宽度                                                                                                                          
 44 setlocal foldlevel=1        " 设置折叠层数为                                                                                                                              
 45 " set foldclose=all           " 设置为自动关闭折叠                                                                                                                        
 46 nnoremap <space> @=((foldclosed(line('.')) < 0) ? 'zc' : 'zo')<CR>  " 用空格键来开关折叠                                                                                  
 47 set history=100             "设置在命令行显示多少历史记录                                                                                                                 
 48 "set mouse=a                                                                                                                                                              
 49 set iskeyword+=_,$,@,%,#,-                                                                                                                                                
 50 set so=7                    " set 7 lines to the cursors( when moving vertical...) 光标距文本框下端有7行的距离                                                            
 51                                                                                                                                                                           
 52                                                                                                                                                                           
 53 "设置leader伟,                                                                                                                                                            
 54 let mapleader=","                                                                                                                                                         
 55 let g:mapleader=","                       
 56                                                                                                                                                                           
 57 "配置多语言系统                                                                                                                                                           
 58 if has("multi_byte")                                                                                                                                                      
 59  " UTF-8 编码                                                                                                                                                             
 60     set encoding=utf-8                                                                                                                                                    
 61     set termencoding=utf-8                                                                                                                                                
 62     set formatoptions+=mM                                                                                                                                                 
 63     set fencs=utf-8,gbk                                                                                                                                                   
 64                                                                                                                                                                           
 65      if v:lang =~? '^\(zh\)\|\(ja\)\|\(ko\)'                                                                                                                              
 66         set ambiwidth=double                                                                                                                                              
 67       endif                                                                                                                                                               
 68                                                                                                                                                                           
 69      if has("win32")                                                                                                                                                      
 70         source $VIMRUNTIME/delmenu.vim                                                                                                                                    
 71         source  $VIMRUNTIME/menu.vim                                                                                                                                      
 72         languag  messages       zh_CN.utf-8                                                                                                                               
 73       endif                                                                                                                                                               
 74 else                                                                                                                                                                      
 75     echoerr "Sorry,this version of (g)vim was not compiled with +multi_byte"                                                                                              
 76 endif                                                                                                                                                                     
 77                                                                                                                                                                           
 78                                                                                                                                                                           
 79                                                                                                                                                                           
 80 " Buffers操作快捷方式!(多文件切换)                                                                                                                                       
 81 nnoremap <C-RETURN> :bnext<CR>                                                                                                                                            
 82 nnoremap <C-S-RETURN> :bprevious<CR>                                                                                                                                      
 83                                                                                                                                                                           
 84 " " Tab操作快捷方式!                                                                                                                                                      
 85 nnoremap <C-TAB> :tabnext<CR>                                                                                                                                             
 86 nnoremap <C-S-TAB> :tabprev<CR>                                                                                                                                           
 87 "关于tab的快捷键                                                                                                                                                          
 88 " map tn :tabnext<cr>                                                                                                                                                     
 89 " map tp :tabprevious<cr>                                                                                                                                                 
 90 " map td :tabnew .<cr>                                                                                                                                                    
 91 " map te :tabedit                                                                                                                                                         
 92 " map tc :tabclose<cr>                                                                                                                                                    
 93                                                                                                                                                                           
 94 set completeopt=longest,menu                                                                                                                                              
 95                                                                                                                                                                           
 96                                                                                                                                                                           
 97 ""-----------------------------------------------------------------                                                                                                       
 98 " plugin - taglist.vim                                                                                                                                                    
 99 " "-----------------------------------------------------------------                                                                                                      
100 let Tlist_Show_One_File = 1                                                                                                                                               
101 let Tlist_Use_Right_Window = 1                                                                                                                                            
102 let Tlist_Exit_OnlyWindow=1                                                                                                                                               
103 let Tlist_Auto_Open=1                                                                                                                                                     
104 let Tlist_File_Fold_Auto_Close=1       " 自动折叠当前非编辑文件的方法列表                                                                                                 
105 let Tlist_Auto_Update = 1                                                                                                                                                 
106 let Tlist_Hightlight_Tag_On_BufEnter = 1                                                                                                                                  
107 let Tlist_Enable_Fold_Column = 0                                                                                                                                          
108 let Tlist_Process_File_Always = 1                                                                                                                                         
109 let Tlist_Display_Prototype = 0                                                                                                                                           
110 let Tlist_Compact_Format = 1  
111 " silent  的作用是在命令行输入栏中不显示对应的命令,即Tlist                                                                                                               
112 nmap <silent> tl :Tlist<cr>                                                                                                                                               
113                                                                                                                                                                           
114 ""-----------------------------------------------------------------                                                                                                       
115 " plugin - winmanager.vim                                                                                                                                                 
116 " "-----------------------------------------------------------------                                                                                                      
117 let g:winManagerWindowLayout='FileExplorer|Taglist'                                                                                                                       
118 nmap wm :WMToggle<cr>                                                                                                                                                     
119                                                                                                                                                                           
120                                                                                                                                                                           
121 ""-----------------------------------------------------------------                                                                                                       
122 " plugin - cscope.vim                                                                                                                                                     
123 " "-----------------------------------------------------------------                                                                                                      
124 set cscopequickfix=s-,c-,d-,i-,t-,e-        "设定是否使用 quickfix 窗口来显示 cscope 结果                                                                                 
125 nmap <C-\>s :cs find s <C-R>=expand("<cword>")<CR><CR>                                                                                                                    
126 nmap <C-\>g :cs find g <C-R>=expand("<cword>")<CR><CR>                                                                                                                    
127 nmap <C-\>c :cs find c <C-R>=expand("<cword>")<CR><CR>                                                                                                                    
128 nmap <C-\>t :cs find t <C-R>=expand("<cword>")<CR><CR>                                                                                                                    
129 nmap <C-\>e :cs find e <C-R>=expand("<cword>")<CR><CR>                                                                                                                    
130 nmap <C-\>f :cs find f <C-R>=expand("<cfile>")<CR><CR>                                                                                                                    
131 nmap <C-\>i :cs find i ^<C-R>=expand("<cfile>")<CR>$<CR>                                                                                                                  
132 nmap <C-\>d :cs find d <C-R>=expand("<cword>")<CR><CR>                                                                                                                    
133 nmap <F4> :cw<cr>                                                                                                                                                         
134                                                                                                                                                                           
135                                                                                                                                                                           
136 ""-----------------------------------------------------------------                                                                                                       
137 " plugin - minibufexpl.vim                                                                                                                                                
138 " "-----------------------------------------------------------------                                                                                                      
139 "minibufexpl 插件的一般设置                                                                                                                                               
140 let g:miniBufExplMapCTabSwitchBufs = 1    "<C-Tab> <C-S-Tab> 切换buffer                                                                                                   
141 let g:miniBufExplMapWindowNavVim = 1      "<C-h,j,k,l> 切换上下左右的窗口                                                                                                 
142 let g:miniBufExplMapWindowNavArrows = 1   "<c-箭头键> 切换到上下左右窗口                                                                                                  
143 let g:miniBufExplModSelTarget=1                                                                                                                                           
144 "let g:miniBufExplorerMoreThanOne=0                                                                                                                                       
145                                                                                                                                                                           
146                                                                                                                                                                           
147                                                                                                                                                                           
148 ""-----------------------------------------------------------------                                                                                                       
149 " plugin - a.vim   c/h文件间相互切换                                                                                                                                      
150 " "-----------------------------------------------------------------                                                                                                      
151 " :A 在新Buffer 中切换到c\h 文件                                                                                                                                          
152 " :AS 横向分割窗口并打开c\h 文件                                                                                                                                          
153 " :AV 纵向分割窗口并打开c\h 文件                                                                                                                                          
154 " :AT 新建一个标签页并打开c\h 文件                                                                                                                                        
155                                                                                                                                                                           
156                                                                                                                                                                           
157 ""-----------------------------------------------------------------                                                                                                       
158 " plugin - grep.vim  在工程中查找字符串                                                                                                                                   
159 " "-----------------------------------------------------------------                                                                                                      
160 " 在要查找字符串上面按F3就可以查找了。                                                                                                                                    
161 nnoremap <silent> <F3> :Grep<CR>   


2.vim快捷键


常用命令:
To undo previousactions, type:          u  (lowercase u)
To undo all thechanges on a line, type: U  (capital U)
To undo the undo's,type:                CTRL-R
y          复制(copy)
p          粘贴(paste)
Ctrl-g     在下面命令栏显示文件名,行号,
G          光标移动到最底端
gg         光标移动到最前面
行号+G     跳转到你指定的行
/+字符串   或者 ?+字符串   搜索字符串
%          在  (,[,{  上按下 % 可以跳转到    },],) 
:s/old/new <enter>       某行old匹配的第一个字符串替换
:s/old/new/g <enter>     某行所有字符串替换
:%s/old/new/g <enter>    某个文件所有字符串替换
:!+非vim的命令          Vim编辑器中可以用这样的方式执行非vim的命令。 例如:!ls, :!dir等。  :make这个命令是vim可以识别的。
Ctrl+w两次      可以实现窗口间的跳转
CTRL-O 和 CTRL-I    来回跳转
Ctrl+]   当光标在某个函数或变量上时, 按下" Ctrl+]", 光标会自动跳转到其定义处
Ctrl-T   正好与ctrl+] 相反
 
%          跳转到配对的括号去
[[         跳转到代码块的开头去(但要求代码块中'{'必须单独占一行)
gD         跳转到局部变量的定义处
''         跳转到光标上次停靠的地方, 是两个', 而不是一个"
mx         设置书签,x 只能是a-z 的26 个字母
`x         跳转到书签处("`"是1 左边的键)
>          增加缩进,"x>"表示增加以下x 行的缩进
<          减少缩进,"x<"表示减少以下x 行的缩进
 
 
 
浏览TagList窗口时,如果还不想让源码跳转, 但是想看看tag 在源码中完整的表达, 可以将光标移到你想要看的tag 上,如图中上边黄色的方框, 然后按下空格键, 在下面的命令栏会显示该tag 在源码中完整的写法, 而不会跳转到源码处。
 
 
vim项目创建添加命令:
$cd /home/wooin/vim71
$ctags -R
l  $cscope -Rbq
l  :csadd /home/wooin/vim71/cscope.out /home/wooin/vim71
 
 
<cr>表示回车符
 
通过vim打开项目文件后,按tl可以显示taglist。
                                             
Ctrl-w,hj k l 向"左,下,上,右"切换窗口.
 
cscope的主要功能是通过同的子命令"find"来实现的 (ctrl + shift + -)g/s/d/c/t
"cscopefind"的用法:
csfind c|d|e|f|g|i|s|t name
0或 s 查找本 C 符号(可以跳过注释)
1或 g 查找本定义
2或 d 查找本函数调用的函数
3或 c 查找调用本函数的函数
4或 t 查找本字符串
6或 e 查找本 egrep 模式
7或 f 查找本文件
8或 i 查找包含本文件的文件
's'   symbol: find all references to the token under cursor
'g'   global: find global definition(s) of the token undercursor
'c'   calls:  find allcalls to the function name under cursor
't'   text:   find allinstances of the text under cursor
'e'   egrep:  egrepsearch for the word under cursor
'f'   file:   open thefilename under cursor
'i'   includes: find files that include the filename undercursor
'd'   called: find functions that function under cursorcalls
 
 
:cw打开QuickFix窗口 (或者是F4)
:ccl   关闭QucikFix 窗口
 
F3  可以用正则表达式的查找,功能比vim自带的grep功能强大。
 
Vim 程序在 /usr/share 文件夹下。
 
 
 
删除多列:
进入vi命令模式,将光标定位在第1行第1列位置,按ctrl+v键进入visiual block模式,将光标移动到第10行第10列,按x键删除。
 
 
 
缩进缩出   
按v进入visual状态,选择多行,用shift+>或shift+< 缩进或缩出。或者不
进入visual,在当前行用shift+>> 或者 shift+<<
 
在命令状态下对当前行用==(连按=两次),或对多行用n==(n是自然数)表示自动
缩进从当前行起的下面n行。你可以试试把代码缩进任意打乱再用n==排版,相当于一
般IDE里的codeformat。
使用gg=G可对整篇代码进行排版。
 
ctrl+s可以暂停终端运行,
ctrl+q后恢复继续运行。
Ctrl+d 相当于exit命令,退出当前会话。
Ctrl+c 中止当前正在执行的程序。
Ctrl+z 将当前运行的程序放到后台运行。与运行时加 &类似。
 
 
折叠命令:
zm 关闭折叠
zM 关闭所有
zr 打开
zR 打开所有
3. vim技巧                   


http://linux.chinaunix.net/techdoc/desktop/2009/07/06/1122020.shtml
1.全字匹配:\< 匹配单词词首      \> 匹配单词词尾
例如: 查询 four 字符串 输入: /\<four\>
--------------------------------------------------------------------------------


2.将注释替换成一个空行
    :%s/\/\*\_.\{-}\*\///g
    
--------------------------------------------------------------------------------    
每行输入到70个字符就自动换行
在VIM配置文件 _vimrc 中添加


set textwidth = 70


对于已有文本,在normal mode输入


:set textwidth=70


gqG


对全文本自动进行70字符后换行处理。
r
--------------------------------------------------------------------------------
在vim中输入/ 或者 : 后,
CTR+R CTR+W 可以直接复制当前光标下的单词到命令行


--------------------------------------------------------------------------------
如果粘贴一个代码,前面多出了// 注释符。 可以这样解决:
先在vim中输入  :set paste, 然后把代码粘贴过来, 之后再 :set nopaste


--------------------------------------------------------------------------------
窗口大小调整
纵向调整
:ctrl+w + 纵向扩大(行数增加)
:ctrl+w - 纵向缩小 (行数减少)
:res(ize) num  例如::res 5,显示行数调整为5行
:res(ize)+num 把当前窗口高度增加num行
:res(ize)-num 把当前窗口高度减少num行
横向调整
:vertical res(ize) num 指定当前窗口为num列
:vertical res(ize)+num 把当前窗口增加num列
:vertical res(ize)-num 把当前窗口减少num列


--------------------------------------------------------------------------------
*(#)             当光标停留在某个单词上时, 输入这条命令表示查找与该单词匹配的
                   下(上)一个单词. 同样, 再输入 n 查找下一个匹配处, 输入 N 反方
                   向查找.
g*(g#)           此命令与上条命令相似, 只不过它不完全匹配光标所在处的单词, 而
                   是匹配包含该单词的所有字符串.
gd               本命令查找与光标所在单词相匹配的单词, 并将光标停留在文档的非
                   注释段中第一次出现这个单词的地方.
                   
--------------------------------------------------------------------------------
c-f              (即 ctrl 键与 f 键一同按下) 本命令即 page down.
c-b              (即 ctrl 键与 b 键一同按下, 后同) 本命令即 page up.
''  (两个')             此命令相当有用, 它移动光标到上一个标记处, 比如用 gd, * 等查
               找到某个单词后, 再输入此命令则回到上次停留的位置.
'.               此命令相当好使, 它移动光标到上一次的修改行.
`.               此命令相当强大, 它移动光标到上一次的修改点.


--------------------------------------------------------------------------------
:12,23s/^/#/     将从12行到23行的行首加入 # 字符
:%s= *$==        将所有行尾多余的空格删除
:g/^\s*$/d        将所有不包含字符(空格也不包含)的空行删除.


--------------------------------------------------------------------------------
vim 鼠标右键无法复制
配置文件中的set mouse=a启动了所有模式, vim接管了鼠标的控制。
鼠标事件有两种处理方式,程序处理和 X 处理。


如果 X 负责处理,则是左键选择,中间粘贴。
要让 vim 中由 X 负责处理,有两个方法:
1. 按住 shift 键,然后选择,此时由 X 处理该选择,copy 选项就 enable 了。如果放掉shift键,则由 vim 处理该选择。
2. 在 .vimrc 中设置 set mouse= (就是说清空),此时vim永远不再干涉鼠标选择,永远把处理权交给 X,这个时候鼠标就处于无模式编辑状态, 
当然也能用鼠标来切换vim里面的tab窗口了,vim中的编辑光标也不会跟随鼠标了。


--------------------------------------------------------------------------------


4.spf-vim 运行


1.执行命令: sudo  curl https://j.mp/spf13-vim3 -L > spf13-vim.sh && sh spf13-vim.sh 或者从https://github.com/spf13/spf13-vim下载spf13-vim-3文件夹, 直接点击运行 ./bootstrap.sh。  ( spf13-vim.sh 和 bootstrap.sh里面的内容是一样的。
2. 修改spf13-vim.sh 文件,REPO_URI='https://github.com/spf13/spf13-vim.git' 改为 REPO_URI='git://github.com/spf13/spf13-vim.git'
VUNDLE_URI="https://github.com/gmarik/vundle.git"  改为  VUNDLE_URI="git://github.com/gmarik/vundle.git"
2. sh spf13-vim.sh 运行脚本, 开始下载插件,会出现插件下载不动,程序卡死的情况。
3.点击ctrl+C, 点击回车键,退出VI。
4.需要单独执行 vim +BundleUpdate 就可以继续下载插件了。它会读取$HOME/.vimrc.bundles 文件,并下载相应的插件 (可以重复多执行步骤3和4)
  
建议: 
删除~/.vimrc中的spell on,这玩意注释掉都没用,用起来很狗血 
在~/.vimrc.local中加入color molokai 
搜索tree,找到C-e,改成C-t, 否则与原来快捷键冲突 
  
BTW, gg=G 可以自动整理代码格式 


5.
spf13默认配置少了一个buffer管理器,当需要打开历史文件时很麻烦,这里推荐TabBar(也可以使用minibufferexplorer??)


另外,gnome的终端颜色个数也需要配置下,插件csapprox-terminal只支持88/256两种颜色.




CSApprox skipped; terminal only has 8 colors, not 88/256


Try checking :help csapprox-terminal for workarounds








Undotree       <leader>u
NERDTree       <c-e> 开启/关闭
            <leader>e或者<leader>nt 开启,并显示当前文件所在目录树
ctrlp        <c-p>  显示匹配找过的文件或者已经打开的文件或者最近使用过的文件
NERDCommenter   <leader>c<space> 在正常模式下后者visual模式下给代码前加 // , 注释代码
neocomplcache     自动显示剩余字符串。 按 tab 进行切换, 点击<c-k>显示可能的snippet。
Fugitive        这个命令只有在目录设置了git,才有用。 版本控制
Tabularize         代码格式排列 <leader>a= / <leader>a: / <leader>a:: / <leader>a,
Tagbar            在右侧显示tag   <leader>tt
EasyMotion        <leader><leader>w  把第一个word字母标记成"abcdefghijklmnopqrstuvwxyz" 

知秋君
上一篇 2024-11-11 07:48
下一篇 2024-07-03 20:36

相关推荐