Локальные сопоставления буфера в Vim: против

#vim

#vim

Вопрос:

Меня интересует одна вещь. Если кто-то хочет сопоставить отображение, специфичное для некоторого буфера, можно пойти любым путем
: а) сделать это с помощью

 nnoremap <buffer> d dd
  

б) или с

 nnoremap <localleader>d dd
  

что эффективно, поскольку localleader специфичен для этого буфера, сделает это отображение специфичным и для этого буфера.

Это, в некотором смысле, похоже на два перекрывающихся способа сделать одно и то же. Есть ли причина для использования одного способа вместо другого? Может быть, по какой-то причине один способ предпочтительнее другого?

Ответ №1:

Насколько я могу судить maplocalleader , он разделяется между буферами. Это означает, что ваша вторая карта не будет специфичной для буфера.

Действительно, если вы определяете карту, специфичную для буфера (например, карта относится только к определенному типу файла) Я считаю, что соглашение заключается в использовании обоих <buffer> и <localleader> . Если вы определяете карту, которая не является специфичной для буфера, вы должны просто использовать <leader> .

Комментарии:

1. А, понятно. Таким образом, <localleader> не является специфичным для буфера, но его назначение — использовать для сопоставлений, специфичных для буфера. Теперь я перечитал справку, и они не смогли сформулировать ее более запутанно. Или я снова ошибся?

2. Да, вы понимаете это так же, как и я. Кажется, что maplocalleader это вообще едва документировано, но после небольшого тестирования это кажется правильным поведением.

Ответ №2:

1 <buffer>

Это важно для того, чтобы ваше сопоставление для определенного типа файла не стало глобальным, если вы только один раз открыли этот тип файла.

2 <LocalLeader>

Это применимо во всем мире. Как описано в R2A2, вы можете сопоставить <LocalLeader> , чтобы быть удобной альтернативой <Leader> . Где-то в вашем vimrc :

 let maplocalleader = '_'
nnoremap <localleader>h :echo 'you just hit _h'<cr>
  

Вы могли бы использовать <localleader> with <buffer> , как рекомендовано во внутренней справке Vim, для вашего ftplugin, тогда он _h будет работать только с этим типом файла.