1. 复制粘贴
普通模式下,可使用 yaw 命令复制当前光标所在单词
2. 查找
2.1 普通查找
-
最快的方式是让光标停留在想要查找的单词的任意一个字母上面, 然后输入Shift + * ,即可快速选中该单词,并且可以通过 n 或 N 进行上一个或下一个的匹配。
-
让光标停留在单词的第一个字母上, 然后输入yw拷贝该单词, 然后输入 / (Ctrl + R) 0 (即 /”0),回车, 就查找到了第一个匹配的单词, 并且可以通过 n 或 N 进行上一个或下一个的匹配。
解释一下:
Ctrl + r 是指使用寄存器 , 你会发现先输入/ ,然后输入 Ctrl + r , 会立刻变为 “ , 即寄存器的前缀, 然后 ”0 就可以理解了吧?
合起来就是 /“0, 就是查找刚才复制的那个单词. -
还有一种方式, 和第二种方式差不多,不过是将单词拷贝到系统剪贴板, 然后再从系统剪贴板拿出来。 即选中需要查找的单词, 然后输入 “+y, 然后输入/(Shfit + Ctrl + v), 就查找到了第一个匹配的单词, 并且可以通过 n 或 N 进行上一个或下一个的匹配。
我们打开别的文件,发现也被高亮了,怎么关闭高亮?
命令模式下,输入:nohlsearch 也可以:set nohlsearch; 当然,可以简写,noh或者set noh
2.2 ag查找
首先安装ag搜索工具, 输入如下命令:
sudo apt-get install silversearcher-ag
接着在~/.vimrc中添加以下内容:
" Set mapleader
let mapleader = ","
" for easy using sliver search
nmap <leader>f :norm yiw<CR>:Ag! -t -Q "<C-R>""
nmap <leader>r :norm yiw<CR>:Ag! -t "<C-R>""
" Locate and return character "above" current cursor position.
function! LookUpwards()
let column_num = virtcol('.')
let target_pattern = '\%' . column_num . 'v.'
let target_line_num = search(target_pattern . '*S', 'bnW')
if !target_line_num
return ""
else
return matchstr(getline(target_line_num), target_pattern)
endif
endfunction
imap <silent> <C-Y> <C-R><C-R>=LookUpwards()<CR>
3. ctag 错误
在函数名处按快捷键“ctrl+]”,报“vim E257: cstag: tag not found”错误。
原因以及解决:
在vimrc中设置了两处tags.
例如,我有两个文件夹/home/test1和/home/test2 ,但是只有/home/test1文件夹下有tags文件。
在vimrc中,找到tags的设定,修改即可
vim中ctags的设置
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" CTags的设定
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
let Tlist_Sort_Type = "name" " 按照名称排序
let Tlist_Use_Left_Window = 1 " 在右侧显示窗口
let Tlist_Compart_Format = 1 " 压缩方式
let Tlist_Exist_OnlyWindow = 1 " 如果只有一个buffer,kill窗口也kill掉buffer
let Tlist_File_Fold_Auto_Close = 0 " 不要关闭其他文件的tags
let Tlist_Enable_Fold_Column = 0 " 不要显示折叠树
autocmd FileType java set tags+=D: oolsjava ags
""autocmd FileType h,cpp,cc,c set tags+=D: oolscpp ags
let Tlist_Show_One_File=1 "不同时显示多个文件的tag,只显示当前文件的
"设置tags
set tags=/home/lin/kernel/linux-4.19/net/tags
set autochdir
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"其他东东
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"默认打开Taglist
let Tlist_Auto_Open=1
""""""""""""""""""""""""""""""
" Tag list (ctags)
""""""""""""""""""""""""""""""""
let Tlist_Ctags_Cmd = '/usr/bin/ctags'
let Tlist_Show_One_File = 1 "不同时显示多个文件的tag,只显示当前文件的
let Tlist_Exit_OnlyWindow = 1 "如果taglist窗口是最后一个窗口,则退出vi
let Tlist_Use_Left_Window = 1
"let Tlist_Use_Right_Window = 0
" minibufexpl插件的一般设置
let g:miniBufExplMapWindowNavVim = 1
let g:miniBufExplMapWindowNavArrows = 1
let g:miniBufExplMapCTabSwitchBufs = 1
let g:miniBufExplModSelTarget = 1
map <C-F12> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR>
let Tlist_Show_One_File=1
let Tlist_Exit_OnlyWindow=1
""""""""""""""""""""""""""""""""""""""'
"""ctags auto update""""""""""
"""""""""""""""""""""""""""""""""""""""
function! UpdateCtags()
let curdir=getcwd()
while !filereadable("./tags")
cd ..
if getcwd() == "/"
break
endif
endwhile
if filewritable("./tags")
!ctags -R --file-scope=yes --langmap=c:+.h --languages=c,c++ --links=yes --c-kinds=+p --c++-kinds=+p --fields=+iaS --extra=+q
TlistUpdate
endif
execute ":cd " . curdir
endfunction
""nmap <F10> :call UpdateCtags()<CR>
""autocmd BufWritePost *.c,*.h,*.cpp call UpdateCtags()
""""""""""""""""""""""""""""""""""""""""""
""set onmicppcompete
""""""""""""""""""""""""""""""""""""""""""
4. vim 改变字体
control+shift+"+"增加显示字体
cotrol+“-” 减小字体