В Vim, как отличить новую строку `\ n` от пустого значения, возвращаемого функцией input ()? - PullRequest
0 голосов
/ 16 мая 2019

Я пишу пользовательскую функцию в Vim и прошу пользователя ввести некоторую информацию для использования:

let x = input('Do input: ')

(update an entry with x)

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

  1. пользователь вводит пустое значение, чтобы функция очистила предыдущее значение записи;
  2. пользователь отменяет процесс вводанажав ESC.

Возможно ли это сделать?Если не использовать input(), что еще я могу сделать?

Похожий вопрос здесь:

Определить, когда пользователь отменяет поле ввода в Vim

Но мне нужен более детальный контроль.

1 Ответ

0 голосов
/ 16 мая 2019

Я попытался немного поэкспериментировать с вводом следующего кода:

function! Foo()
    let x = input('Do input: ')
    execute "normal i".x
    echo "Foo called with: ".x
endfunc
command -nargs=0 Foo call Foo()

Вот следующие варианты поведения:

  • Нажатие Return добавляет в документ значениенабирается пользователем и печатает строку echo,
  • Кажется, что нажатие Escape имеет тот же эффект, что и ввод ничего и нажатие Return, ничего не добавляется в документ, а строка echoнапечатано, без значения x,
  • При нажатии C-c (Control C, похоже на escape, но не совсем. CF :help i_^c), ввод и выполнение функции отменяются, echo строка не выполняется.

Поэтому я бы сказал, что вы можете рассмотреть escape (ярлык для очистки ввода и нажатия return) и пустой ввод как одно и то же, и рассмотреть CTRL-c и ввод отменяется.

Однако я не уверен, что, оставаясь в функции, вы можете обнаружить, что пользователь отменил ввод или нет, но, надеюсь, кто-то узнает лучше меня, чтобы подтвердить илиисправьте это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...