Невозможно успешно использовать настраиваемые сопоставленные команды vim из vimrc (mac) - PullRequest
1 голос
/ 10 мая 2019

Я пытаюсь добавить команду к своему .vimrc и использовать ее.

Я записал макрос (в регистр h), который печатает следующее (заканчивается символом новой строки):

one
two
three

Я могу увидеть это в регистре h, набрав :reg.Это выглядит так:

"h   ione^Mtwo^Mthree^M^[

Я вставил это, а также альтернативную версию в мои .vimrc под test и test2 соответственно:

map <Leader>test ione^Mtwo^Mthree^M^[
map <Leader>test2 ione<C-R>two<C-R>three<C-R><ESC>

Мое пониманиеявляется то, что test использует символы, которые не могут быть отображены, такие как ^M и ^[, поэтому я создал test2 с тем, что я прочитал эквивалент .vimrc.

После перезапуска vim (что, как я полагаю, означает запуск другого сеанса vim после записи этого .vimrc), я проверяю их.

В обычном режиме (после многократного нажатия ESC ), Я пытаюсь оба из следующего:

:test

:test2

В обоих случаях мне выдается ошибка для каждогосоответственно:

E492: Not an editor command: test

E492: Not an editor command: test2

Безрезультатно, я проверяю, было ли сопоставлено то, что я отобразил.В обычном режиме я набираю :map и действительно вижу то, что добавил, но они отображаются с обратной косой чертой:

   \test2        ione<C-R>two<C-R>three<C-R><Esc>
   \test         ione^Mtwo^Mthree^M^[

Наконец, в обычном режиме я пытаюсь снова, на этот раз с обратной косой чертой,Я пытаюсь оба из следующего:

:\test

:\test2

На этот раз я получаю следующую ошибку для обоих команды:

E10: \ should be followed by /, ? or &

Я на Mac и пробовал использовать оба терминала (который поставляется с OSX), а также iTerm2.

Может кто-нибудь дать мне несколько советов?

1 Ответ

3 голосов
/ 10 мая 2019

ваши сопоставления выполняются, если вы нажимаете клавишу лидера, а затем клавиши test или test2. Вы не создали команды (:).

Если вы хотите использовать их в качестве команды, тогда вам не нужно отображение, а что-то вроде этого в вашем .vimrc:

function! Test()                
    execute "normal ione"      
    execute "normal otwo"      
    execute "normal othree"    
    execute "normal o"         
endfunc                        
command -nargs=0 Test call Test()

Который вы затем можете использовать как :Test.

Однако, если вы хотите сделать отображение, а не команду, вы можете захотеть:

  • более короткое сопоставление с типом (это очень субъективно),
  • для использования nnoremap вместо map (для использования только в обычном режиме и не для рекурсивного выполнения отображений),
  • ваш test2 - это то, что вам нужно (что я здесь поменяю на <leader>t)
  • <C-R> - это Control R, вы хотите <CR> для ключа возврата.

Вот пример:

nnoremap <Leader>t ione<CR>two<CR>three<CR><ESC>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...