2

Так как | используется для разделения команд, я думал, что я мог бы просто сделать это:

:function! SomeFunc() | return 0 | endfunction

Он прекрасно работает, когда я набираю его на отдельных строках (ввод первой строки вызывает запрос на оставшиеся строки):

:function! SomeFunc()
  return 0
endfunction

Теперь я вижу это предостережение :help :bar :

Эти команды видят '|' в качестве аргумента, и поэтому не может сопровождаться другой командой Vim:

...

: функция

Есть ли способ обойти это?

Я вижу, где это говорит ...

Вы также можете использовать для разделения команд так же, как и с '|'. Для вставки используйте CTRL-V CTRL-J. "^ @" будет показано.

Но это тоже не работает:

:function! SomeFunc() <NL> return 0 <NL> endfunction

Это дает эту ошибку:

E488: Trailing characters

Это работает, если я вручную набираю последовательность CTRL-V CTRL-J:

:function! SomeFunc() ^@ return 0 ^@ endfunction

Но это все еще не приемлемое решение, потому что я хочу иметь возможность просто скопировать и вставить function!команду и нажмите Enter...

2 ответа2

5

Один вариант будет использовать exe:

exe ":function! SomeFunc() \n return 0 \n endfunction"

Символы \n интерпретируются как строки как строки в двойных кавычках. Это означает, что вы должны быть осторожны, избегая любых специальных последовательностей.

Это сказало,

Я хочу иметь возможность просто скопировать и вставить функцию! команду и нажмите Enter ...

Как упоминал Роменель, ваша конечная цель не ясна. Если это то, чем вы часто занимаетесь по какой-то причине, возможно, есть лучший способ получить то, что вы хотите. Хорошая идея описать вашу проблему с точки зрения того, зачем вам нужен этот функционал.

1

Я изучал это, потому что я хотел протестировать функции, которые я скопировал онлайн в сеансе vim перед добавлением в .vimrc. Я попытался source но это требует имени файла.

Один из комментариев в разделе ответов гласит :@" . Это работает, что есть в безымянном регистре.

Если вы хотите запустить то, что скопировали из Интернета, вы можете сделать :@+ . Но это не сработает, если у вас не установлен vim с интеграцией с системным буфером обмена.

Другой метод, который работает без интеграции с буфером обмена, это :normal :<PASTE YOUR COMMAND HERE WITH YOUR SYSTEM HOTKEY> . Это запускает все в обычном режиме, как если бы вы печатали его самостоятельно, каждая новая строка продолжалась бы на следующую строку для функции.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .