Большую часть времени, когда я вставляю дату, я пытаюсь сделать это в середине строки. По умолчанию это выглядит так :r! Аромат вставки всегда помещает результат в новую строку. Это имеет некоторый смысл для меня, так как большинство команд оболочки выводят символ новой строки перед отображением результата команды, и это, безусловно, предпочтительнее в терминале. В случае отказа от Vim для крошечной команды, такой как date +%x , это не мое предпочтительное поведение. Как мне обойти это?

2 ответа2

2

В режиме вставки вы можете использовать Ctrl-R =, чтобы вставить выражение в текущую позицию курсора.

Вы можете использовать, например, функцию system() , к сожалению, это решает только половину проблемы, так как к выходу system() всегда будет добавлен хотя бы последний разрыв строки, поэтому она будет разбивать строку после ввода. Чтобы узнать, как избежать этих окончательных разрывов строк в случае system() , взгляните на этот ответ на моем сайте vi.stackexchange.

(например, вы можете использовать Ctrl-R = systemlist('date')[0] Enter).


Альтернативный способ вставки даты в текущей позиции курсора - использовать Ctrl-R = strftime('% c'). Enter

Ctrl-R = использует регистр выражений для вставки содержимого. Вы можете узнать больше с :help i_ctrl-r или просмотреть документацию в appspot.

0

Я считаю , что эта проблема не так много , что команды оболочки обычно заканчиваются символом новой строки, но что read является командной строки-ориентированный (т.е. бывшая команда).  Он присутствовал в оригинальной версии ed в 1970 - е годы, до того :r!command существовала, и общий вариант использования заключался в чтении группы строк (например, функции C или абзаца текста) из одного файла в другой.  Большинству пользователей хотелось бы вставлять их как новые отдельные строки.

Вы можете проверить / продемонстрировать это, выполнив :r!printf Tuesday .  Даже если команда printf Tuesday не записывает символ новой строки (так как вы не указали \n), вы получите Tuesday на отдельной строке.

Возможно, самый простой обходной путь - это ввести i Введите Esc (чтобы разорвать текущую строку), - или k, чтобы переместиться обратно вверх на строку, а затем выполните свое :r!command , а затем J к Join линии обратно вместе.  Если это то, что вы делаете очень часто, может быть полезно сопоставить макрос для него.

Раскрытие информации: я достаточно хорошо знаю vi , но в vim есть много вещей, которые я не выучил.  Там может быть более простой способ сделать это в vim .

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