Пользовательская команда vi: Как вставить текущую дату с содержимым переменной? - PullRequest
0 голосов
/ 14 марта 2012

Я новичок в редакторе vi, и я хотел бы создать простую пользовательскую команду в .vimrc, которая вставляет что-то вроде 2012-03-13 22:21:17.0 +0100 / Daniel.

На самом деле моя команда (в .vimrc) выглядит следующим образом:

command! InsertTime :normal a<C-R>=strftime('%F %H:%M:%S.0 %z')<CR>

Я также установил переменную:

let myname="Daniel"

InsertTime вставляет дату идеально. Но как я могу объединить его с содержимым моей переменной?

Ответы [ 2 ]

2 голосов
/ 14 марта 2012

Для объединения сценариев vim используйте . символ.Так что попробуйте это:

В vimrc:

let myname="Daniel"
command! InsertTime :normal a<C-R>=strftime('%F %H:%M:%S.0 %z') . "/" . myname<CR>

там не тестировалось.

0 голосов
/ 15 марта 2012

Поскольку вы сказали, что вы новичок в "vim", я собираюсь предположить, что вы не знаете ничего из того, о чем я вам скажу. Очень жаль, если ты их уже знаешь.

Если вы собираетесь делать это много (вставьте строку «% F% H:% M:% S.0% z / Daniel») вместо определения команды, которую вы должны вызывать с помощью :command_name, определите макрос и / или входной макрос, который может быть вызван всего двумя или тремя символами.

Чтобы определить входной макрос, выполните следующие действия в приглашении ':' или добавьте его в файл $ HOME / .exrc или $ HOME / .vimrc (без предшествующего ':'):

:map <C-X><C-X> Go<ESC>!!date '+\%F \%H:\%M:\%S.0 \%z'<CR>A / Daniel<ESC>

Теперь, когда вы находитесь в "vi" (но не в режиме ввода), набрав control-Xcontrol-X, вы получите:

G            go to last line in file; replace this with the "motion" keys sequence appropriate for your use (or nothing at all if you want to append the line right after the cursor)
o            open a new line
<ESC>        escape out of input mode
!!date ...   invoke the date command, replace the current line with its stdout (output)
A            append at the end of the line (now having the "date")
 / Dan...    verbatim intput text
<ESC>      escape out of input mode

control-Xcontrol-X может быть какой-то необычной последовательностью, которую вы обычно не используете ни для чего, и не можете использовать никакие операции "vi", которые вы можете использовать. Я использую в качестве первого символа, потому что в «vi» уменьшает следующее целое число в строке после курсора, если таковые имеются. Это то, что я почти никогда не делаю. Я определяю свои макросы для вызова с помощью <C-X><C-B>, <C-X><C-D>, <C-X>s1 и т. Д.

Чтобы создать входной макрос, ну, это еще одна длинная тема, и я устал набирать сегодня, так что еще один день. :)

...