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

标签 linux vim terminal key-bindings xterm

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

由于默认的 vim 语法不起作用,我猜测终端没有发送 ctrl+pgup 的字符代码。和 ctrl+pgdn这是 Vim 所期待的。如果那是真的,我不确定如何找出文字键码是什么。我在 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 .

我还能尝试什么?

最佳答案

好吧,我明白了。我忽略了一些非常简单的事情,这对我来说通常就是这种情况。

ctrlpgupctrlpgdn 已经是 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" "")
    

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

  2. 将此命令放入 .vimrc:

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

    改为考虑 nmap,以将快捷方式限制为正常模式。

关于linux - Vim:映射 ctrl+pgup 和 ctrl+pgdn (CTRL+Page Up/Down) 组合键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35930528/

相关文章:

vim - 如何在vim中使制表符间距=NONE的背景颜色?

emacs - M-RET 和 M-UP/DOWN 在控制台/终端的 Emacs 组织模式下不起作用

Unix:获取导出路径到 "Stick"

c - 由于 malloc 大小不正确导致的不确定性故障?

linux - 为什么只有父进程接受输入?

linux - 重新安装linux后如何恢复已删除的文件

linux - E : Sub-process/usr/bin/dpkg returned an error code (1) whenever using apt-get

vim - 我如何从 vimrc 获取文件列表?

vim - 在 vim 中映射全选、复制、粘贴

linux - 打开终端以发出一个命令