Большую часть времени, когда я вставляю дату, я пытаюсь сделать это в середине строки. По умолчанию это выглядит так :r!
Аромат вставки всегда помещает результат в новую строку. Это имеет некоторый смысл для меня, так как большинство команд оболочки выводят символ новой строки перед отображением результата команды, и это, безусловно, предпочтительнее в терминале. В случае отказа от Vim для крошечной команды, такой как date +%x
, это не мое предпочтительное поведение. Как мне обойти это?
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.
Я считаю , что эта проблема не так много , что команды оболочки обычно заканчиваются символом новой строки, но что read
является командной строки-ориентированный (т.е. бывшая команда).
Он присутствовал в оригинальной версии ed
в 1970 - е годы, до того :r!command
существовала, и общий вариант использования заключался в чтении группы строк (например, функции C или абзаца текста) из одного файла в другой.
Большинству пользователей хотелось бы вставлять их как новые отдельные строки.
Вы можете проверить / продемонстрировать это, выполнив :r!printf Tuesday
.
Даже если команда printf Tuesday
не записывает символ новой строки (так как вы не указали \n
), вы получите Tuesday
на отдельной строке.
Возможно, самый простой обходной путь - это ввести i Введите Esc (чтобы разорвать текущую строку), - или k, чтобы переместиться обратно вверх на строку, а затем выполните свое :r!command
, а затем J к Join
линии обратно вместе.
Если это то, что вы делаете очень часто, может быть полезно сопоставить макрос для него.
Раскрытие информации: я достаточно хорошо знаю vi
, но в vim
есть много вещей, которые я не выучил.
Там может быть более простой способ сделать это в vim
.