2

この問題は明らかに私のVimの理解をはるかに超えています。これらの2つのキーバインドは、2文字だけ異なります。それ以外の点では、完全に同一です。

" Move viewport up/down.
noremap <C-d> :exe "normal! " . (winheight(".") / 4) . "\<C-e>"<CR>
noremap <C-u> :exe "normal! " . (winheight(".") / 4) . "\<C-y>"<CR>

それでも、下の(<C-u>)は意図したとおりに完全に機能しますが、上のの()はこのエラーを引き起こします。

E114:引用符がありません: "\" E15:式が無効です: "normal!"。(winheight( "。")/ 4)。"\"

私はVimを2回再起動し、これらのコマンドだけがキーにバインドされていることを3回確認しました。また、何らかの理由で関連性がある場合に備えて、それらを切り替えてみましたが、<C-d>それでもコマンドがクラッシュします。

では、ウォーリーはどこにあるのでしょうか。


の出力gvim.exe --version

VIM-Vi IMproved 7.3(2010年8月15日、2010年8月16日コンパイル10:31:31)
MS-OLEをサポートするWindows64ビットGUIバージョン
george@reilly.orgによって編集されました
GUI付きの巨大なバージョン。含まれる機能(+)または含まれない機能(-):
+ arabic + autocmd + balloon_eval+ブラウズ++builtin_terms+ byte_offset + cindent
+ clientserver + clipboard + cmdline_compl + cmdline_hist +cmdline_info+コメント
+ conceal + cryptov + cscope + cursorbind + cursorshape + dialog_con_gui + diff
+ digraphs -dnd -ebcdic + emacs_tags + eval + ex_extra + extra_search + farsi
+ file_in_path + find_in_path + float +folding -footer + gettext / dyn -hangul_input
+ iconv / dyn + insert_expand + jumplist + keymap + langmap + libcall + linebreak
+ lispindent + listcmds + localmap -lua + menu + mksession + modify_fname + mouse
+ mouseshape + multi_byte_ime / dyn + multi_lang -mzscheme + netbeans_intg + ole
-osfiletype + path_extra -perl + persistent_undo + postscript + printer + profile
+ python / dyn -python3 + quickfix + reltime + rightleft -ruby + scrollbind + signs
+ smartindent -sniff + startuptime + statusline -sun_workshop + Syntax + tag_binary
+ tag_old_static -tag_any_white -t​​cl -tgetent -termresponse + textobjects + title
+ツールバー+user_commands+ vertsplit + virtualedit + visual + visualextra + viminfo
+ vreplace + wildignore + wildmenu + windows + writebackup -xfontset -xim
-xterm_save -xpm_w32
   システムvimrcファイル: "$ VIM \ vimrc"
     ユーザーvimrcファイル: "$ HOME \ _vimrc"
 2番目のユーザーvimrcファイル: "$ VIM \ _vimrc"
      ユーザーexrcファイル: "$ HOME \ _exrc"
  2番目のユーザーexrcファイル: "$ VIM \ _exrc"
  システムgvimrcファイル: "$ VIM \ gvimrc"
    ユーザーgvimrcファイル: "$ HOME \ _gvimrc"
2番目のユーザーgvimrcファイル: "$ VIM \ _gvimrc"
    システムメニューファイル: "$ VIMRUNTIME \ menu.vim"
コンパイル:cl -c / W3 /nologo-I。-Iproto -DHAVE_PATHDEF -DWIN32 -DFEAT_CSCOPE
-DFEAT_NETBEANS_INTG -DWINVER = 0x0400 -D_WIN32_WINNT = 0x0400 /Fo.\ObjGOY/ / Ox / GL -DNDEBUG  
/ Zl / MT -DFEAT_OLE -DFEAT_MBYTE_IME -DDYNAMIC_IME -DFEAT_MBYTE -DFEAT_GUI_W32
-DDYNAMIC_ICONV -DDYNAMIC_GETTEXT -DFEAT_PYTHON -DDYNAMIC_PYTHON  
-DDYNAMIC_PYTHON_DLL = \ "python27.dll \" -DMSWINPS -DFEAT_HUGE /Fd.\ObjGOY/ / Zi
リンク:link / RELEASE / nologo / subsystem:windows / LTCG:STATUS oldnames.lib kernel32.lib advapi32.lib
shell32.lib gdi32.lib comdlg32.lib ole32.lib uuid.lib / machine:AMD64 / nodefaultlib gdi32.lib version.lib   
winspool.lib comctl32.lib advapi32.lib shell32.lib / machine:AMD64 / nodefaultlib libcmt.lib oleaut32.lib user32.lib

公式VimダウンロードページのリンクからVimをダウンロードしました:

http://code.google.com/p/vim-win3264/downloads/list

4

1 に答える 1

6

noremap解釈<C-e>し、その<C-y>前に解釈するexeのでexe、制御シーケンスが供給されますが、これは必ずしも適切に解釈されるとは限りません。考えられる回避策は、コマンドを定義してからそれらにマップすることです。

com! ShiftDown exe "norm!" winheight(".")/4 . "<C-e>"
com! ShiftUp exe "norm!" winheight(".")/4 . "<C-y>"
noremap <C-d> :ShiftDown<CR>
noremap <C-u> :ShiftUp<CR>

<C-v> <C-e>これらの文字を使用し<C-v> <C-y>て挿入することにより、コマンドを直接マップすることもできます。

noremap <C-d> :exe "norm!" winheight(".")/4 . "<C-v><C-e>"<CR>
noremap <C-u> :exe "norm!" winheight(".")/4 . "<C-v><C-y>"<CR>

または、<LT>リテラルを挿入するために使用できます<

noremap <C-d> :exe "norm!" winheight(".")/4 . "<Bslash><LT>C-e>"<CR>
noremap <C-u> :exe "norm!" winheight(".")/4 . "<Bslash><LT>C-y>"<CR>

注意:リテラル\は機能するかもしれませんが、安全であるために:help map使用<Bslash>することをお勧めします。

于 2013-01-16T02:44:09.800 に答える