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

问题描述 投票:5回答:2

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

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

这是我尝试过的:

  1. 通常的方法: map <C-PageUp> :bp<cr>
  2. 使用此答案的方法从命令行设置它:Why <C-PageUp> and <C-PageDown> not work in 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尝试上面的所有内容。

我还能尝试什么?

linux vim terminal key-bindings xterm
2个回答
6
投票

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

ctrlpgup和ctrlpgdn已经是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模式。

0
投票

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

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

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

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

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

进一步阅读:

© www.soinside.com 2019 - 2024. All rights reserved.