function! g:insert_date()
let l:pattern="\\d\\{2}:\\d\\{2}"
let l:match=match(getline('.'),l:pattern)
let l:curline=getline('.')
echo "Current line: ". l:curline
normal gg
let l:time=system("time /t")
let l:date=system("date /t")
let l:date_time=l:date."\t".l:time
if l:match!=-1
echo match
normal dd
"call setline('.',system('time /t')."<<>>")
call setline('.',l:date_time)
else
echo match ." ". l:curline." ".l:pattern
sleep 2
normal O
"call setline('.',system("time /t")."\r")
call setline('.',l:date_time)
normal dd
endif
endfunction
У меня есть этот код выше, который должен вставить дату и время в первой строке файла.
Я собирался назначить его автокоманде BufRead, но она пока не идеальна. По сути, он проверяет, есть ли временная строка в первой строке файла и, если она найдена, обновляет ее. Если нет, он открывает новую строку выше и вставляет дату. Проблема в том, что он не открывает новую строку, когда строка не найдена. normal 0
является виновником. Он работает, когда я набираю его в командной строке, но не работает, когда вызывается функция. Кроме того, я не знаю, почему вы должны дважды избегать использования regExp в скрипте, пока он работает нормально с одной обратной косой чертой ?
и /
.
Как видите, я прокомментировал строку с помощью функции system()
потому что она продолжает вставлять видимые нулевые байты (ascii 0) и возврат каретки (ascii 13). То, что делает system()
, делает их видимыми. Я не нашел обходного пути для этого ( read!
не хранит в переменной. Мне нужна дата и время
одна линия).
call setline('.',system("time /t")."\r")
call setline('.',system("time /t")."\n\n\n\n\n") ^@^@^@^@^@^@^@
call setline('.',system("time /t")."\n\n\n\n\n") ^@^@^@^@^@^@^@ (0)
call setline('.',system('time /t')."\r\r\r\r\r\r") ^M^M^M^M (13)
read! time\ /t
Дополнительные детали:
- кодирование = UTF-8
set list
отключен- Шрифт консоль:h10
- формат файла - дос
- версия = 7,3