Как настроить сопоставления в командной строке CtrlP - VIM

Я использую плагин ctrlP.

В соответствии с документом ctrlp я должен быть в состоянии переназначить, как это

  let g:ctrlp_prompt_mappings = { 'PrtSelectMove("k")': ['<c-u>', '<up>'] }
  let g:ctrlp_prompt_mappings = { 'PrtSelectMove("j")': ['<c-d>', '<down>'] }
  let g:ctrlp_prompt_mappings = { 'PrtDelete()'       : ['<c-k>', '<del>'] }
  let g:ctrlp_prompt_mappings = { 'PrtExit()'         : ['<c-l>', '<esc>'] }

Но это не работает, я попробовал несколько вариантов - все еще получая тот же результат.

Я хочу переназначить эти четыре строки ( из документа):

\ 'PrtDelete()':          ['<del>'],
\ 'PrtSelectMove("j")':   ['<c-j>', '<down>'],
\ 'PrtSelectMove("k")':   ['<c-k>', '<up>'],
\ 'PrtExit()':            ['<esc>', '<c-c>', '<c-g>'],

+++ UPDATE +++

  let g:ctrlp_prompt_mappings = {
  \ 'PrtDelete()': ['<c-k>', '<del>'],
  \ 'PrtExit()': ['<esc>', '<c-l>', '<c-g>'],
  \ 'PrtSelectMove("k")': ['<c-u>', '<up>'],
  \ 'PrtSelectMove("j")': ['<c-d>', '<down>'],
  \}

Только <c-u> работает. <c-k>, <c-l>, <c-d> не работает

когда я делаю :echo g:ctrlp_prompt_mappings

{'PrtDelete()': ['<c-k>', '<del>'], 'PrtSelectMove("j")': ['<c-d>', '<down>'], 'PrtExit()': ['<esc>', '<c-l>', '<c-g>'], 'PrtSelectMove("k")': ['<c-u>', '<up>']}

+++ +++UPDATE2

  let g:ctrlp_prompt_mappings = {
  \ 'PrtExit()':   ['<c-l>', '<esc>'],
  \ 'PrtSelectMove("k")': ['<c-u>', '<up>'],
  \ 'PrtSelectMove("j")': ['<c-d>', '<down>'],
  \ 'PrtBS()': ['<c-k>', '<bs>', '<c-]>'],
  \ 'ToggleByFname()': [''],
  \ 'PrtCurRight()': ['<right>'],
  \}

все работает. (<c-l>, <c-d>) начал работать, потому что я удаляю их из

  \ 'ToggleByFname()':      [''],
  \ 'PrtCurRight()':        ['<right>'],

1 ответ

Решение

Если вы скопируете предложенное решение в буфер обмена,

  let g:ctrlp_prompt_mappings = { 'PrtSelectMove("k")': ['<c-u>', '<up>'] }
  let g:ctrlp_prompt_mappings = { 'PrtSelectMove("j")': ['<c-d>', '<down>'] }
  let g:ctrlp_prompt_mappings = { 'PrtDelete()'       : ['<c-k>', '<del>'] }
  let g:ctrlp_prompt_mappings = { 'PrtExit()'         : ['<c-l>', '<esc>'] }

, а затем "источник", используя :@+, вы заметите, что вы на самом деле перезаписываете переменную три раза, поэтому остается только последняя строка:

:echo g:ctrlp_prompt_mappings

output: {'PrtExit()': ['<c-l>', '<esc>']}

Было бы лучше, если вы будете следовать шаблону, описанному в документации:

 *'g:ctrlp_prompt_mappings'*
Use this to customize the mappings inside CtrlP's prompt to your liking. You
only need to keep the lines that you've changed the values (inside []): >
let g:ctrlp_prompt_mappings = {
\ 'PrtBS()': ['<bs>', '<c-]>'],
\ 'PrtDelete()': ['<del>'],
\ 'PrtDeleteWord()': ['<c-w>'],
\ 'PrtClear()': ['<c-u>'],
\ 'PrtSelectMove("j")': ['<c-j>', '<down>'],
\ 'PrtSelectMove("k")': ['<c-k>', '<up>'],
...
\}

Каждый блок скобок содержит словарь. Ваш подход определяет четыре разных словаря и присваивает их всем одной и той же переменной, а форма, описанная в документации, определяет один с несколькими парами ключ / значение. Проверьте :help dict для дополнительной информации.

Другие вопросы по тегам