命令 | 模式 |
---|---|
map | normal,visual and Operator-pending |
vmap | Visual |
nmap | Normal |
omap | Operator-pending |
map! | Insert and Command-line |
imap | Insert |
cmap | Command-line |
官方文档描述在这里
模式 | 描述 |
---|---|
normal | 执行vim命令以及按了esc之后进入该模式,也被称为命令模式 |
visual | 按v进入该模式 |
Insert | 按i进入该模式 |
operator-pending | 这类似于普通模式,但是在操作员命令启动后,Vim正在等待{motion}指定操作员将要处理的文本。 |
Command-line | 在命令行模式(也称为Cmdline模式)下,您可以在窗口底部输入一行文本。 这用于Ex命令“:”,模式搜索命令“?”。 和“ /”,以及过滤器命令“!”。 |
"normal模式下,按下F2会在最后一行下面附加一个时间
map <F2> GoDate: <Esc>:read !date<CR>kJ
”insert模式下,按下F2会在光标的后面插入一个回车和时间
:imap <F2> <CR>Date: <Esc>:read !date<CR>kJ
在vim中执行:map
命令,可以查看当前配置的map关系
命令 | 模式 |
---|---|
noremap | normal,visual and Operator-pending |
vnoremap | Visual |
nnoremap | Normal |
onoremap | Operator-pending |
noremap! | Insert and Command-line |
inoremap | Insert |
cnoremap | Command-line |
在上面的例子中对F2的映射可以修改为
map <F2> G<F3>
imap <F2> <Esc><F3>
map <F3> oDate: <Esc>:read !date<CR>kJ
假设您几乎从未使用过Ex模式,并且想使用“ Q”命令来设置文本格式(在旧版本的Vim中是如此)。 这个映射可以做到::map Q gq
。
但是,在极少数情况下,您仍然需要使用Ex模式。 让我们将“ gQ”映射到Q,以便仍然可以进入Ex模式::map gQ Q
。
现在发生的是,当您键入“ gQ”时,它将映射到“ Q”。 到目前为止,一切都很好。 但是随后“ Q”映射到“ gq”,因此键入“ gQ”将导致“ gq”,并且您根本不会进入Ex模式。
为了避免再次映射键,请使用“:noremap”命令:noremap gQ Q
命令 | 描述 | 值 |
---|---|---|
<S-...> | shift-key | shift <S- |
<C-...> | control-key | control ctrl <C- |
<M-...> | alt-key or meta-key | meta alt <M- |
<A-...> | same as <M-...> | <A- |
<leader> | 前缀符 | 默认是\ ,可以配置 |
下面的内容可以配合这篇提到基本配置一起使用,主要安装了以下插件
升级到vim8.2版本的方法
sudo add-apt-repository ppa:jonathonf/vim sudo apt update sudo apt install vim
关于字符的映射自己设置吧。
"plugin gtags
let GtagsCscope_Auto_Load = 1
let CtagsCscope_Auto_Map = 1
let GtagsCscope_Quiet = 1
call plug#begin('~/.vim/plugged')
Plug 'preservim/nerdtree'
Plug 'vim-airline/vim-airline'
Plug 'vim-airline/vim-airline-themes'
Plug 'majutsushi/tagbar'
"Plug 'ludovicchabant/vim-gutentags'
"Plug 'skywind3000/gutentags_plus'
Plug 'Yggdroot/LeaderF'
call plug#end()
"configure NERDTree
map <F2> :NERDTreeToggle<CR>
"configure tagbar
nmap <F3> :TagbarToggle<CR>
"configure airline
"Automatically displays all buffers when there's only one tab open
let g:airline#extensions#tabline#enabled = 1
let g:airline#extensions#tabline#formatter = 'unique_tail'
let g:airline_theme='solarized'
let g:airline_solarized_bg='dark'
"configure gutentags
let g:gutentags_ctags_tagfile = '.tags'
" enable gtags module
let g:gutentags_modules = []
if executable('ctags')
let g:gutentags_modules += ['ctags']
endif
if executable('gtags-cscope') && executable('gtags')
let g:gutentags_modules += ['gtags_cscope']
endif
" config project root markers.
let g:gutentags_project_root = ['.root','.git']
" generate datebases in my cache directory, prevent gtags files polluting my project
let g:gutentags_cache_dir = expand('~/.cache/tags')
" forbid gutentags adding gtags databases
let g:gutentags_auto_add_gtags_cscope = 0
"map gtags
" don't show the help in normal mode
let g:Lf_HideHelp = 1
let g:Lf_UseCache = 0
let g:Lf_UseVersionControlTool = 0
let g:Lf_IgnoreCurrentBufferName = 1
" popup mode
"let g:Lf_WindowPosition = 'popup'
"let g:Lf_PreviewInPopup = 1
"let g:Lf_StlSeparator = { 'left': "\ue0b0", 'right': "\ue0b2", 'font': "DejaVu Sans Mono for Powerline" }
"let g:Lf_PreviewResult = {'Function': 0, 'BufTag': 0 }
let g:Lf_ShortcutF = "<leader>ff"
noremap <leader>fb :<C-U><C-R>=printf("Leaderf buffer %s", "")<CR><CR>
noremap <leader>fm :<C-U><C-R>=printf("Leaderf mru %s", "")<CR><CR>
noremap <leader>ft :<C-U><C-R>=printf("Leaderf bufTag %s", "")<CR><CR>
noremap <leader>fl :<C-U><C-R>=printf("Leaderf line %s", "")<CR><CR>
noremap <C-B> :<C-U><C-R>=printf("Leaderf! rg --current-buffer -e %s ", expand("<cword>"))<CR>
noremap <C-F> :<C-U><C-R>=printf("Leaderf! rg -e %s ", expand("<cword>"))<CR>
" search visually selected text literally
xnoremap gf :<C-U><C-R>=printf("Leaderf! rg -F -e %s ", leaderf#Rg#visual())<CR>
noremap go :<C-U>Leaderf! rg --recall<CR>
" should use `Leaderf gtags --update` first
let g:Lf_GtagsAutoGenerate = 0
let g:Lf_Gtagslabel = 'native-pygments'
noremap <leader>fr :<C-U><C-R>=printf("Leaderf! gtags -r %s --auto-jump", expand("<cword>"))<CR><CR>
noremap <leader>fd :<C-U><C-R>=printf("Leaderf! gtags -d %s --auto-jump", expand("<cword>"))<CR><CR>
noremap <leader>fo :<C-U><C-R>=printf("Leaderf! gtags --recall %s", "")<CR><CR>
noremap <leader>fn :<C-U><C-R>=printf("Leaderf gtags --next %s", "")<CR><CR>
noremap <leader>fp :<C-U><C-R>=printf("Leaderf gtags --previous %s", "")<CR><CR>