繁体   English   中英

Vim:映射ctrl + pgup和ctrl + pgdn(CTRL + Page Up / Down)组合键

[英]Vim: Map ctrl+pgup and ctrl+pgdn (CTRL+Page Up/Down) key combinations

我正在尝试将Vim命令映射到ctrl+pgupctrl+pgdn组合键。 这些键的vim语法不起作用(即<PageUp><PageDown> ,或<C-PageUp><C-PageDown> )。

由于默认的vim语法不起作用,我猜测终端没有发送ctrl+pgdn所期望的ctrl+pgupctrl+pgdn的字符代码。 如果这是真的,我不知道如何找出文字键码是什么。 我在Arch Linux上使用xfce4-terminal。

这是我尝试过的:

  1. 通常的方法:

     map <C-PageUp> :bp<cr> 
  2. 使用此答案的方法从命令行设置它: 为什么<C-PageUp>和<C-PageDown>在vim中不起作用?

     :map <CTRL-V><CTRL-PAGEUP> :bp<cr> 

    当我在命令行中键入上面的命令时,没有显示:

     map :bp<cr> 

    Vim说No mapping found

  3. 来自Vim wiki的这个方法: http://vim.wikia.com/wiki/Mapping_keys_in_Vim_- Tutorial (Part_2)#Key_notation

     set <PageUp>=<type Ctrl-V><type PageUp> "^[[5~ map <C-PageUp> :bp<cr> 
  4. 对答案的修改:

     set <C-PageUp>=<type Ctrl-V><type Ctrl+PageUp> "^M map <C-PageUp> :bp<cr> 
  5. 在意识到<type *>是用户命令之后,我做了这些命令,并且vim粘贴了输出。 我用这个输出替换了<type *>

     set <PageUp>=^[[5~ map <C-PageUp> :bp<cr> " Also: set <PageUp>=[[5~ map <C-PageUp> :bp<cr> " Also: set <PageUp>=<^[[5~> map <C-PageUp> :bp<cr> " Also: set <PageUp>=<[[5~> map <C-PageUp> :bp<cr> " Also: set <C-PageUp>=^M map <C-PageUp> :bp<cr> " Also: set <C-PageUp>=<^M> map <C-PageUp> :bp<cr> 
  6. 尝试5中的所有方法,但不先设置选项。 例如:

     map <C-[[5~> :bp<cr> 
  7. 答案中的方法: https//groups.google.com/forum/#!topic / vim_use / j85-2xQkb7s

     map [5~ :bp<cr> 
  8. 答案的方法: https//superuser.com/questions/322983/how-to-let-ctrl-page-down-switch-tabs-inside-vim-in-terminal-app

      map \\033[5;5~ :bp<cr> 
  9. 设置不同的术语选项:

      set term=xterm " Also: set term=xterm-256color 

    我的$TERM环境变量设置为xterm

  10. 使用此答案提示的一些方法: https//superuser.com/questions/480215/how-to-map-pagedown-and-pageup-keys-to-function-normally

      map <Esc>[5~ :bp<cr> map <kpp> :bp<cr> 
  11. 尝试使用.vim/after/plugin/下的文件而不是.vimrc
  12. 尝试以上所有内容:MBEbp而不是:bp

我还能尝试什么?

好吧,我明白了。 我忽视了一些非常简单的事情,这通常适用于我。

ctrl pgupctrl pgdn已经是xfce4-terminal本身的键盘快捷键(用于切换终端选项卡)。 为了允许Vim使用这些组合键,终端本身不能使用它们。 所以这是xfce4-terminal的一个问题,而不是Vim。

可以使用此处描述的方法取消设置xfce4-terminal快捷方式: https//unix.stackexchange.com/questions/159979/xfce4-terminal-disable-individual-shortcut

简而言之,这是一个过程:

  1. 打开~/.config/xfce4/terminal/accels.scm并取消注释/编辑这些行:

     (gtk_accel_path "<Actions>/terminal-window/next-tab" "") (gtk_accel_path "<Actions>/terminal-window/prev-tab" "") 

    (您可以通过打开一个新窗口并单击菜单栏中的选项卡来验证此更改: 上一个选项卡下一个选项卡项目不应再显示其右侧的快捷方式。)

  2. 将此命令放在.vimrc

     map <C-PageUp> :bp<CR> map <C-PageDown> :bn<CR> 

    请考虑使用nmap ,将快捷方式限制为NORMAL模式。

你可能最接近#2,但可能误解了指令。

Vim不知道控制页面等,因为这些键没有传统的termcap符号,并且因为它们可能因终端而异。 虽然vim有一些内置的termcap信息,但它不太可能有这些非传统的定义。

此外,虽然ncurses通过用户可定义的功能提供这些键的定义 ,但vim不使用该信息(因为它仅使用termcap接口)。

Vim 可以 map字面的字符序列map到结果。 但要做到这一点,你必须将角色变成vim。 您的终端可能会发送以转义字符开头的一系列字符,这些字符通常以^[ 输入特殊键时,您必须防止该转义字符被vim吃掉。 通常的方法是首先按下控制 V (“文字下一个”字符),然后按特殊键。 如果你看到^[回声,这是正常的。

并非所有终端都为修改后的密钥发送有趣的(或不同的或任何内容)。 例如,Offhand,PuTTY和Konsole在这方面的能力不如xterm或rxvt,通常只是不发送任何内容 使密钥可见的副作用是查找终端是否发送了有用的信息。

进一步阅读:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM