Vim <cr>映射不起作用?</cr>

时间:2011-04-26 16:23:28

标签: mapping vim

我刚刚开始使用vim,并且非常有趣地添加了有用的插件。问题是,在设置我的所有插件的某个时刻,我没有注意到enter键的映射停止正常工作。在插入模式下,当我按下回车键时,如果当前没有自动完成菜单,则不会创建换行符,而是打印出来:

pumvisible() ? "\" : "\"

这是我的vimrc:

"{{{Auto Commands

" Improve python indentation and higlighting
autocmd FileType python set complete+=k~/.vim/syntax/python.vim isk+=.,(

" Automatically cd into the directory that the file is in
autocmd BufEnter * execute "chdir ".escape(expand("%:p:h"), ' ')

" Remove any trailing whitespace that is in the file
autocmd BufRead,BufWrite * if ! &bin | silent! %s/\s\+$//ge | endif

" Restore cursor position to where it was before
augroup JumpCursorOnEdit
   au!
   autocmd BufReadPost *
            \ if expand("<afile>:p:h") !=? $TEMP |
            \   if line("'\"") > 1 && line("'\"") <= line("$") |
            \     let JumpCursorOnEdit_foo = line("'\"") |
            \     let b:doopenfold = 1 |
            \     if (foldlevel(JumpCursorOnEdit_foo) > foldlevel(JumpCursorOnEdit_foo - 1)) |
            \        let JumpCursorOnEdit_foo = JumpCursorOnEdit_foo - 1 |
            \        let b:doopenfold = 2 |
            \     endif |
            \     exe JumpCursorOnEdit_foo |
            \   endif |
            \ endif
   " Need to postpone using "zv" until after reading the modelines.
   autocmd BufWinEnter *
            \ if exists("b:doopenfold") |
            \   exe "normal zv" |
            \   if(b:doopenfold > 1) |
            \       exe  "+".1 |
            \   endif |
            \   unlet b:doopenfold |
            \ endif
augroup END

"}}}

"{{{Misc Settings

" Necesary  for lots of cool vim things
set nocompatible

" This shows what you are typing as a command.  I love this!
set showcmd

" Folding Stuffs
set foldmethod=marker

" Needed for Syntax Highlighting and stuff
filetype on
filetype plugin on
syntax enable
set grepprg=grep\ -nH\ $*

" Who doesn't like autoindent?
set autoindent

" Spaces are better than a tab character
set expandtab
set smarttab

" Who wants an 8 character tab?  Not me!
set shiftwidth=4
set softtabstop=4

" Use english for spellchecking, but don't spellcheck by default
if version >= 700
   set spl=en spell
   set nospell
endif

" Real men use gcc
"compiler gcc

" Cool tab completion stuff
set wildmenu
set wildmode=list:longest,full

" Enable mouse support in console
set mouse=a

" Got backspace?
set backspace=2

" Line Numbers PWN!
set number

" Ignoring case is a fun trick
set ignorecase

" And so is Artificial Intellegence!
set smartcase

" This is totally awesome - remap jj to escape in insert mode.  You'll never type jj anyway, so it's great!
inoremap jj <Esc>

nnoremap JJJJ <Nop>

" Incremental searching is sexy
set incsearch

" Highlight things that we find with the search
set hlsearch

" Since I use linux, I want this
let g:clipbrdDefaultReg = '+'

" When I close a tab, remove the buffer
set nohidden

" Set off the other paren
highlight MatchParen ctermbg=4
" }}}

"{{{Look and Feel

" Favorite Color Scheme
if has("gui_running")
   colorscheme desert
   " Remove Toolbar
   set guioptions-=T
   "Terminus is AWESOME
   set guifont=Terminus\ 9
   set lines=999 columns=999
else
   colorscheme desert
endif

"Status line gnarliness
set laststatus=2
set statusline=%F%m%r%h%w\ (%{&ff}){%Y}\ [%l,%v][%p%%]

" }}}

"{{{ Functions

"{{{ Open URL in browser

function! Browser ()
   let line = getline (".")
   let line = matchstr (line, "http[^   ]*")
   exec "!konqueror ".line
endfunction

"}}}

"{{{Theme Rotating
let themeindex=0
function! RotateColorTheme()
   let y = -1
   while y == -1
      let colorstring = "inkpot#ron#blue#elflord#evening#koehler#murphy#pablo#desert#torte#"
      let x = match( colorstring, "#", g:themeindex )
      let y = match( colorstring, "#", x + 1 )
      let g:themeindex = x + 1
      if y == -1
         let g:themeindex = 0
      else
         let themestring = strpart(colorstring, x + 1, y - x - 1)
         return ":colorscheme ".themestring
      endif
   endwhile
endfunction
" }}}

"{{{ Paste Toggle
let paste_mode = 0 " 0 = normal, 1 = paste

func! Paste_on_off()
   if g:paste_mode == 0
      set paste
      let g:paste_mode = 1
   else
      set nopaste
      let g:paste_mode = 0
   endif
   return
endfunc
"}}}

"{{{ Todo List Mode

function! TodoListMode()
   e ~/.todo.otl
   Calendar
   wincmd l
   set foldlevel=1
   tabnew ~/.notes.txt
   tabfirst
   " or 'norm! zMzr'
endfunction

"}}}

"}}}

"{{{ Mappings

" Toggle line numbers and fold column for easy copying
nnoremap <silent> <F2> :set nonumber!<CR>:set foldcolumn=0<CR>

" Open the Project Plugin
nnoremap <silent> <Leader>pal  :Project .vimproject<CR>

" TODO Mode
nnoremap <silent> <Leader>todo :execute TodoListMode()<CR>

" Open the TagList Plugin <F3>
nnoremap <silent> <F3> :Tlist<CR>

" Open the Fuf Plugin
nnoremap <silent> <F4> :FufFile<CR>

" Open the MRU Plugin
nnoremap <silent> <F5> :MRU<CR>

" Next Tab
nnoremap <silent> <C-Right> :tabnext<CR>

" Previous Tab
nnoremap <silent> <C-Left> :tabprevious<CR>

" New Tab
nnoremap <silent> <C-t> :tabnew<CR>

" Rotate Color Scheme <F8>
nnoremap <silent> <F8> :execute RotateColorTheme()<CR>

" DOS is for fools.
nnoremap <silent> <F9> :%s/$//g<CR>:%s// /g<CR>

" Paste Mode!  Dang! <F10>
nnoremap <silent> <F10> :call Paste_on_off()<CR>
set pastetoggle=<F10>

" Execute python file being edited with <Shift> + e:
map <buffer> <S-e> :w<CR>:!/usr/bin/env python % <CR>

" Edit vimrc \ev
nnoremap <silent> <Leader>ev :tabnew<CR>:e ~/.vimrc<CR>

" Edit gvimrc \gv
nnoremap <silent> <Leader>gv :tabnew<CR>:e ~/.gvimrc<CR>

" Up and down are more logical with g..
nnoremap <silent> k gk
nnoremap <silent> j gj
inoremap <silent> <Up> <Esc>gka
inoremap <silent> <Down> <Esc>gja

" Good call Benjie (r for i)
nnoremap <silent> <Home> i <Esc>r
nnoremap <silent> <End> a <Esc>r

" Create Blank Newlines and stay in Normal mode
nnoremap <silent> zj o<Esc>
nnoremap <silent> zk O<Esc>

" Space will toggle folds!
nnoremap <space> za

" Search mappings: These will make it so that going to the next one in a
" search will center on the line it's found in.
map N Nzz
map n nzz

" Testing
set completeopt=longest,menuone,preview

inoremap <expr> <cr> pumvisible() ? "\<c-y>" : "\<c-g>u\<cr>"
inoremap <expr> <c-n> pumvisible() ? "\<lt>c-n>" : "\<lt>c-n>\<lt>c-r>=pumvisible() ? \"\\<lt>down>\" : \"\"\<lt>cr>"
inoremap <expr> <m-;> pumvisible() ? "\<lt>c-n>" : "\<lt>c-x>\<lt>c-o>\<lt>c-n>\<lt>c-p>\<lt>c-r>=pumvisible() ? \"\\<lt>down>\" : \"\"\<lt>cr>"

" Swap ; and :  Convenient.
nnoremap ; :
nnoremap : ;

" Fix email paragraphs
nnoremap <leader>par :%s/^>$//<CR>

"ly$O#{{{ "lpjjj_%A#}}}jjzajj

"}}}

"{{{Taglist configuration
let Tlist_Use_Right_Window = 1
let Tlist_Enable_Fold_Column = 0
let Tlist_Exit_OnlyWindow = 1
let Tlist_Use_SingleClick = 1
let Tlist_Inc_Winwidth = 0
"}}}

let g:rct_completion_use_fri = 1
"let g:Tex_DefaultTargetFormat = "pdf"
let g:Tex_ViewRule_pdf = "kpdf"

let g:pydiction_location = "/home/axilus/.vim/after/ftplugin/python_pydiction/complete-dict"

filetype plugin indent on
syntax on

我加载的脚本:

  1: /usr/share/vim/vimrc
  2: /usr/share/vim/vim72/debian.vim
  3: /usr/share/vim/vim72/syntax/syntax.vim
  4: /usr/share/vim/vim72/syntax/synload.vim
  5: /usr/share/vim/vim72/syntax/syncolor.vim
  6: /usr/share/vim/vim72/filetype.vim
  7: /home/axilus/.vimrc
  8: /usr/share/vim/vim72/ftplugin.vim
  9: /usr/share/vim/vim72/syntax/nosyntax.vim
 10: /usr/share/vim/vim72/colors/desert.vim
 11: /usr/share/vim/vim72/indent.vim
 12: /home/axilus/.vim/plugin/EasyMotion.vim
 13: /home/axilus/.vim/plugin/NERD_tree.vim
 14: /home/axilus/.vim/plugin/fuf.vim
 15: /home/axilus/.vim/autoload/l9.vim
 16: /home/axilus/.vim/autoload/fuf.vim
 17: /home/axilus/.vim/autoload/fuf/buffer.vim
 18: /home/axilus/.vim/autoload/fuf/file.vim
 19: /home/axilus/.vim/autoload/fuf/coveragefile.vim
 20: /home/axilus/.vim/autoload/fuf/dir.vim
 21: /home/axilus/.vim/autoload/fuf/bookmarkfile.vim
 22: /home/axilus/.vim/autoload/fuf/bookmarkdir.vim
 23: /home/axilus/.vim/autoload/fuf/tag.vim
 24: /home/axilus/.vim/autoload/fuf/buffertag.vim
 25: /home/axilus/.vim/autoload/fuf/taggedfile.vim
 26: /home/axilus/.vim/autoload/fuf/jumplist.vim
 27: /home/axilus/.vim/autoload/fuf/changelist.vim
 28: /home/axilus/.vim/autoload/fuf/quickfix.vim
 29: /home/axilus/.vim/autoload/fuf/line.vim
 30: /home/axilus/.vim/autoload/fuf/help.vim
 31: /home/axilus/.vim/autoload/fuf/givenfile.vim
 32: /home/axilus/.vim/autoload/fuf/givendir.vim
 33: /home/axilus/.vim/autoload/fuf/givencmd.vim
 34: /home/axilus/.vim/autoload/fuf/callbackfile.vim
 35: /home/axilus/.vim/autoload/fuf/callbackitem.vim
 36: /home/axilus/.vim/plugin/l9.vim
 37: /home/axilus/.vim/plugin/matchit.vim
 38: /home/axilus/.vim/plugin/mru.vim
 39: /home/axilus/.vim/plugin/pydoc.vim
 40: /home/axilus/.vim/plugin/snipMate.vim
 41: /home/axilus/.vim/plugin/supertab.vim
 42: /home/axilus/.vim/plugin/surround.vim
 43: /home/axilus/.vim/plugin/taglist.vim
 44: /home/axilus/.vim/plugin/tcomment.vim
 45: /usr/share/vim/vim72/plugin/getscriptPlugin.vim
 46: /usr/share/vim/vim72/plugin/gzip.vim
 47: /usr/share/vim/vim72/plugin/matchparen.vim
 48: /usr/share/vim/vim72/plugin/netrwPlugin.vim
 49: /usr/share/vim/vim72/plugin/rrhelper.vim
 50: /usr/share/vim/vim72/plugin/spellfile.vim
 51: /usr/share/vim/vim72/plugin/tarPlugin.vim
 52: /usr/share/vim/vim72/plugin/tohtml.vim
 53: /usr/share/vim/vim72/plugin/vimballPlugin.vim
 54: /usr/share/vim/vim72/plugin/zipPlugin.vim
 55: /home/axilus/.vim/after/plugin/snipMate.vim
 56: /home/axilus/.vim/nerdtree_plugin/exec_menuitem.vim
 57: /home/axilus/.vim/nerdtree_plugin/fs_menu.vim

我是vim的新手,所以如果还有其他需要请告诉我。

3 个答案:

答案 0 :(得分:5)

Supertab包含到&lt; CR&gt;的映射。与“inoremap&lt; expr&gt;&lt; cr&gt; ...”映射冲突。具体来说,如果supertab在另一个之后加载则会破坏它。如果inoremap映射在加载supertab之后出现,那么它就可以工作。

您可以在supertab之后通过将它们放在.vim / after / plugin / mappings.vim或类似内容中来进行inoremap映射。

答案 1 :(得分:2)

您可以尝试发出命令:map <CR>,该命令将列出回车的当前映射。如果这没有帮助,也许您可​​以尝试在已加载的所有插件文件中使用grep来查找与map <CR>和/或pumvisible匹配的字符串。

答案 2 :(得分:2)

这种映射应该做什么?

inoremap <expr> <cr> pumvisible() ? "\<c-y>" : "\<c-g>u\<cr>"

好像那是你的问题。不确定如何解决它,但我很确定如果你把它取出并重新启动,你的返回键将再次工作。我不明白因为return接受了我所选择的完成功能。