我正在尝试将Vim命令映射到ctrl+pgup
和ctrl+pgdn
组合键。这些键的vim语法不起作用(即<PageUp>
和<PageDown>
,或<C-PageUp>
和<C-PageDown>
)。
由于默认的vim语法不起作用,我猜测终端没有发送Vim期待的ctrl+pgup
和ctrl+pgdn
的字符代码。如果这是真的,我不知道如何找出文字键码是什么。我在Arch Linux上使用xfce4-terminal。
这是我尝试过的:
map <C-PageUp> :bp<cr>
:map <CTRL-V><CTRL-PAGEUP> :bp<cr>
当我在命令行中键入上面的命令时,没有显示:
map :bp<cr>
而Vim说No mapping found
。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>
map <C-[[5~> :bp<cr>
map [5~ :bp<cr>
map \033[5;5~ :bp<cr>
set term=xterm
" Also:
set term=xterm-256color
我的$TERM
环境变量设置为xterm
。 map <Esc>[5~ :bp<cr>
map <kpp> :bp<cr>
.vim/after/plugin/
下的文件而不是.vimrc
中的所有内容。:MBEbp
而不是:bp
尝试上面的所有内容。我还能尝试什么?
好吧,我明白了。我忽视了一些非常简单的事情,这通常适用于我。
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
并取消注释/编辑这些行:
(gtk_accel_path "<Actions>/terminal-window/next-tab" "")
(gtk_accel_path "<Actions>/terminal-window/prev-tab" "")
(您可以通过打开一个新窗口并单击菜单栏中的选项卡来验证此更改:上一个选项卡和下一个选项卡项目不应再显示其右侧的快捷方式。).vimrc
中:
map <C-PageUp> :bp<CR>
map <C-PageDown> :bn<CR>
请考虑使用nmap
,将快捷方式限制为NORMAL模式。你可能最接近#2,但可能误解了指令。
Vim不知道控制页面等,因为这些键没有传统的termcap符号,并且因为它们可能因终端而异。虽然vim有一些内置的termcap信息,但它不太可能有这些非传统的定义。
此外,虽然ncurses通过user-definable capabilities提供这些键的定义,但vim不使用该信息(因为它仅使用termcap接口)。
Vim可以map
结果的字符序列。但要做到这一点,你必须将角色变成vim。您的终端可能会发送以转义字符开头的一系列字符,这些字符通常以^[
的形式回显。输入特殊键时,您必须防止该转义字符被vim吃掉。通常的方法是首先按controlV(“文字下一个”字符),然后按特殊键。如果你看到^[
回应,这是正常的。
并非所有终端都为修改后的密钥发送有趣的(或不同的或任何内容)。例如,Offhand,PuTTY和Konsole在这方面的能力不如xterm或rxvt,通常只是不发送任何内容。使密钥可见的副作用是查找终端是否发送了有用的信息。
进一步阅读: