Vim:映射ctrl+pgup和ctrl+pgdn (CTRL+Page Up/Down)组合键
Vim: Map ctrl+pgup and ctrl+pgdn (CTRL+Page Up/Down) key combinations
我正在尝试将 Vim 命令映射到 ctrl+pgup
和 ctrl+pgdn
组合键。这些键的 vim 语法不起作用(即 <PageUp>
和 <PageDown>
,或 <C-PageUp>
和 <C-PageDown>
)。
由于默认的 vim 语法不起作用,我猜测终端没有发送 ctrl+pgup
和 ctrl+pgdn
的字符代码 [=106= 】 期待中。如果那是真的,我不确定如何找出文字键码是什么。我在 Arch Linux.
上使用 xfce4-terminal
这是我试过的方法:
常用方法:
map <C-PageUp> :bp<cr>
使用此答案的方法从命令行设置它:Why <C-PageUp> and <C-PageDown> not work in vim?
:map <CTRL-V><CTRL-PAGEUP> :bp<cr>
当我在命令行中输入上面的命令时,没有任何显示:
map :bp<cr>
而Vim表示No mapping found
。
此方法来自 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>
对该答案的修改:
set <C-PageUp>=<type Ctrl-V><type Ctrl+PageUp> "^M
map <C-PageUp> :bp<cr>
意识到<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>
尝试5中的所有方法,但没有先设置选项。例如:
map <C-[[5~> :bp<cr>
这个答案的方法:https://groups.google.com/forum/#!topic/vim_use/j85-2xQkb7s
map [5~ :bp<cr>
-
map 3[5;5~ :bp<cr>
设置不同的术语选项:
set term=xterm
" Also:
set term=xterm-256color
我的$TERM
环境变量设置为xterm
。
使用此答案暗示的一些方法:https://superuser.com/questions/480215/how-to-map-pagedown-and-pageup-keys-to-function-normally
map <Esc>[5~ :bp<cr>
map <kpp> :bp<cr>
- 使用
.vim/after/plugin/
下的文件而不是 .vimrc
. 下的文件尝试上述所有操作
- 尝试使用
:MBEbp
而不是 :bp
以上所有内容。
我还能尝试什么?
您可能最接近 #2,但可能误解了说明。
Vim 不 知道 control-pageup 等,因为这些键没有常规的 termcap 符号,并且它们可能与一个终端不同给另一个。虽然 vim 有一些内置的 termcap 信息,但不太可能有这些非常规定义。
此外,虽然 ncurses 提供了这些键的定义,但 user-definable capabilities,vim 不使用该信息(因为它仅使用 termcap 接口) .
Vim 可以 map
字符的文字序列到结果。但是要做到这一点,你必须让字符进入vim。您的终端可能会发送一系列以 escape 字符开头的字符,通常回显为 ^[
。输入特殊键时,您必须防止 escape 字符被 vim 吃掉。通常的做法是先按 controlV("literal next" 字符),然后按特殊键。如果看到 ^[
回显,那是正常的。
并非所有终端都会为修改后的密钥发送有趣的(或不同的 - 或任何东西)。例如,PuTTY 和 Konsole 在这方面的能力不如 xterm 或 rxvt,通常只是发送 nothing。使密钥可见的副作用是发现您的终端是否发送了有用的东西。
进一步阅读:
- How can I see what my keyboard sends?(ncurses 常见问题解答)
好的,我明白了。我忽略了一些非常简单的事情,这对我来说通常就是这种情况。
ctrlpgup 和 ctrlpgdn xfce4-terminal 本身已经是键盘快捷键(用于切换终端选项卡)。为了允许 Vim 使用这些组合键,终端本身不能使用它们。所以这是 xfce4-terminal 的问题,而不是 Vim。
可以使用此处描述的方法取消设置 xfce4-terminal 快捷方式:
https://unix.stackexchange.com/questions/159979/xfce4-terminal-disable-individual-shortcut
简而言之,流程如下:
打开~/.config/xfce4/terminal/accels.scm
和uncomment/edit行:
(gtk_accel_path "<Actions>/terminal-window/next-tab" "")
(gtk_accel_path "<Actions>/terminal-window/prev-tab" "")
(您可以通过打开新的 window 并单击菜单栏中的 选项卡 来验证此更改: 上一个选项卡 下一个选项卡 项目不应再在其右侧显示快捷方式。)
将此命令放入 .vimrc
:
map <C-PageUp> :bp<CR>
map <C-PageDown> :bn<CR>
考虑 nmap
,将快捷方式限制为正常模式。
我正在尝试将 Vim 命令映射到 ctrl+pgup
和 ctrl+pgdn
组合键。这些键的 vim 语法不起作用(即 <PageUp>
和 <PageDown>
,或 <C-PageUp>
和 <C-PageDown>
)。
由于默认的 vim 语法不起作用,我猜测终端没有发送 ctrl+pgup
和 ctrl+pgdn
的字符代码 [=106= 】 期待中。如果那是真的,我不确定如何找出文字键码是什么。我在 Arch Linux.
这是我试过的方法:
常用方法:
map <C-PageUp> :bp<cr>
使用此答案的方法从命令行设置它:Why <C-PageUp> and <C-PageDown> not work in vim?
:map <CTRL-V><CTRL-PAGEUP> :bp<cr>
当我在命令行中输入上面的命令时,没有任何显示:
map :bp<cr>
而Vim表示
No mapping found
。此方法来自 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>
对该答案的修改:
set <C-PageUp>=<type Ctrl-V><type Ctrl+PageUp> "^M map <C-PageUp> :bp<cr>
意识到
<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>
尝试5中的所有方法,但没有先设置选项。例如:
map <C-[[5~> :bp<cr>
这个答案的方法:https://groups.google.com/forum/#!topic/vim_use/j85-2xQkb7s
map [5~ :bp<cr>
-
map 3[5;5~ :bp<cr>
设置不同的术语选项:
set term=xterm " Also: set term=xterm-256color
我的
$TERM
环境变量设置为xterm
。使用此答案暗示的一些方法:https://superuser.com/questions/480215/how-to-map-pagedown-and-pageup-keys-to-function-normally
map <Esc>[5~ :bp<cr> map <kpp> :bp<cr>
- 使用
.vim/after/plugin/
下的文件而不是.vimrc
. 下的文件尝试上述所有操作
- 尝试使用
:MBEbp
而不是:bp
以上所有内容。
我还能尝试什么?
您可能最接近 #2,但可能误解了说明。
Vim 不 知道 control-pageup 等,因为这些键没有常规的 termcap 符号,并且它们可能与一个终端不同给另一个。虽然 vim 有一些内置的 termcap 信息,但不太可能有这些非常规定义。
此外,虽然 ncurses 提供了这些键的定义,但 user-definable capabilities,vim 不使用该信息(因为它仅使用 termcap 接口) .
Vim 可以 map
字符的文字序列到结果。但是要做到这一点,你必须让字符进入vim。您的终端可能会发送一系列以 escape 字符开头的字符,通常回显为 ^[
。输入特殊键时,您必须防止 escape 字符被 vim 吃掉。通常的做法是先按 controlV("literal next" 字符),然后按特殊键。如果看到 ^[
回显,那是正常的。
并非所有终端都会为修改后的密钥发送有趣的(或不同的 - 或任何东西)。例如,PuTTY 和 Konsole 在这方面的能力不如 xterm 或 rxvt,通常只是发送 nothing。使密钥可见的副作用是发现您的终端是否发送了有用的东西。
进一步阅读:
- How can I see what my keyboard sends?(ncurses 常见问题解答)
好的,我明白了。我忽略了一些非常简单的事情,这对我来说通常就是这种情况。
ctrlpgup 和 ctrlpgdn xfce4-terminal 本身已经是键盘快捷键(用于切换终端选项卡)。为了允许 Vim 使用这些组合键,终端本身不能使用它们。所以这是 xfce4-terminal 的问题,而不是 Vim。
可以使用此处描述的方法取消设置 xfce4-terminal 快捷方式: https://unix.stackexchange.com/questions/159979/xfce4-terminal-disable-individual-shortcut
简而言之,流程如下:
打开
~/.config/xfce4/terminal/accels.scm
和uncomment/edit行:(gtk_accel_path "<Actions>/terminal-window/next-tab" "") (gtk_accel_path "<Actions>/terminal-window/prev-tab" "")
(您可以通过打开新的 window 并单击菜单栏中的 选项卡 来验证此更改: 上一个选项卡 下一个选项卡 项目不应再在其右侧显示快捷方式。)
将此命令放入
.vimrc
:map <C-PageUp> :bp<CR> map <C-PageDown> :bn<CR>
考虑
nmap
,将快捷方式限制为正常模式。