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
Eu tenho este código acima que deveria inserir a data e hora
na primeira linha do arquivo.
Eu ia atribuí-lo a um autocomponente BufRead, mas ainda não é perfeito. Basicamente, ele verifica se há uma string de tempo na primeira linha do arquivo e, se encontrado, o atualiza. Caso contrário, abre uma nova linha acima e insere a data. O problema é que ele não abre uma nova linha quando a string não é
encontrado. normal 0
é o culpado. Ele funciona quando eu o digito na linha de comando, mas falha quando a função é chamada. Além disso, eu não sei porque você tem que escapar do regExp duas vezes no script enquanto ele funciona bem com
uma barra invertida com ?
e /
.
Como você pode ver, eu comentei a linha com a função system()
porque ela continua inserindo bytes nulos visíveis (ascii 0) e retornos de carro (ascii 13). O que é system()
fazendo isso os torna visíveis. Eu não encontrei uma solução alternativa para isso ( read!
não armazena em uma variável. Eu preciso da data e hora no
uma linha).
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
Detalhes adicionais:
- codificação = utf-8
-
set list
está desativado
- Fonte é consolas: h10
- o formato de arquivo é dos
- versão = 7.3