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

Gre*_*n23 5 linux vim terminal xterm key-bindings

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

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

这是我尝试过的:

  1. 通常的方法:

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

    :map <CTRL-V><CTRL-PAGEUP> :bp<cr>
    
    Run Code Online (Sandbox Code Playgroud)

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

    map  :bp<cr>
    
    Run Code Online (Sandbox Code Playgroud)

    而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>
    
    Run Code Online (Sandbox Code Playgroud)
  4. 对答案的修改:

    set <C-PageUp>=<type Ctrl-V><type Ctrl+PageUp> "^M
    map <C-PageUp> :bp<cr>
    
    Run Code Online (Sandbox Code Playgroud)
  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>
    
    Run Code Online (Sandbox Code Playgroud)
  6. 尝试5中的所有方法,但不先设置选项.例如:

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

    map [5~ :bp<cr>
    
    Run Code Online (Sandbox Code Playgroud)
  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>
    
    Run Code Online (Sandbox Code Playgroud)
  9. 设置不同的术语选项:

     set term=xterm
     " Also:
     set term=xterm-256color
    
    Run Code Online (Sandbox Code Playgroud)

    我的$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>
    
    Run Code Online (Sandbox Code Playgroud)
  11. 尝试上面的所有内容,.vim/after/plugin/而不是在下面的文件.vimrc.
  12. 尝试上面的所有内容:MBEbp而不是:bp.

我还能尝试什么?

Gre*_*n23 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(xfce4-settings-manager),转到.vimrc> nmap,然后打开~/.config/xfce4/terminal/accels.scm.
  2. 编辑/创建.vimrc并将此行追加到文件中:

    (gtk_accel_path "<Actions>/terminal-window/next-tab" "")
    (gtk_accel_path "<Actions>/terminal-window/prev-tab" "")
    
    Run Code Online (Sandbox Code Playgroud)
  3. 打开xfce4终端窗口,然后在同一窗口中打开另一个选项卡.
  4. 突出显示nmap> ~/.config/xfce4/terminal/accels.scm,按Backspace,然后键入新的键盘组合.
  5. .vimrc> 重复步骤4 nmap.
  6. 将此命令放入~/.config/xfce4/terminal/accels.scm:

    map <C-PageUp> :bp<CR>
    map <C-PageDown> :bn<CR>
    
    Run Code Online (Sandbox Code Playgroud)