vim (四) 使用技巧

1. 复制粘贴

普通模式下,可使用 yaw 命令复制当前光标所在单词

2. 查找

2.1 普通查找

  1. 最快的方式是让光标停留在想要查找的单词的任意一个字母上面, 然后输入Shift + *  ,即可快速选中该单词,并且可以通过 n  或  N 进行上一个或下一个的匹配。

  2. 让光标停留在单词的第一个字母上, 然后输入yw拷贝该单词, 然后输入 / (Ctrl + R) 0 (即 /”0),回车, 就查找到了第一个匹配的单词, 并且可以通过 n  或  N 进行上一个或下一个的匹配。
    解释一下:
    Ctrl + r 是指使用寄存器 , 你会发现先输入/ ,然后输入 Ctrl + r , 会立刻变为 “ , 即寄存器的前缀, 然后 ”0 就可以理解了吧?
    合起来就是 /“0, 就是查找刚才复制的那个单词.

  3. 还有一种方式, 和第二种方式差不多,不过是将单词拷贝到系统剪贴板, 然后再从系统剪贴板拿出来。 即选中需要查找的单词, 然后输入 “+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+“-” 减小字体

欢迎评论交流
原文地址:https://www.cnblogs.com/linengier/p/12383117.html