2013-12-19 4 views
1

Я хотел бы сделать Vim вставлять временную метку каждый раз, когда я создаю новую строку. Из Best way to insert timestamp in Vim? я могу видеть, что есть способ вставки метки на нажатие клавиши:Вставить метку времени на новую строку в vim

nmap <F3> a<C-R>=strftime("%Y-%m-%d %a %I:%M %p")<CR><Esc> 
imap <F3> <C-R>=strftime("%Y-%m-%d %a %I:%M %p")<CR> 

Вероятно, я мог бы просто карту Введите к этому, вместо F3; однако это kludge (например, я мог нажать CtrlM). Есть ли способ вызвать действие в новой строке в Vim?

ответ

0

Предлагаю использовать аббревиатуры, чтобы вставить временную метку, следующую выдержку из моего ~/.vimrc.

" Examples of the Date abbrevations 
    "------------------------------------//// 
    " xdate : Wed 18 Dec 2013 08:23:44 PM CST 
    " rdate : Fri, 06 Dec 2013 21:52:35 -0600 
    " adate : Dec 06, 2013 
    " ldate : 2013-12-06 21:52:52 
    " sdate : 2013-12-06 

    iab <expr> rdate strftime("%a, %d %b %Y %H:%M:%S %z") 
    iab <expr> xdate strftime("%a %d %b %Y %I:%M:%S %p %Z") 
    iab adate <C-R>=strftime("%b %d, %Y")<cr> 
    iab ldate <C-R>=strftime("%Y-%m-%d %H:%M:%S")<cr> 
    iab sdate <C-R>=strftime("%Y-%m-%d")<cr> 
+0

Вы неправильно понимаете, я не хочу добавлять карту Ctrl + M к карте ввода. Я хочу что-то вызывать, когда новая строка вставляется в буфер любыми способами (например, если я вставлял что-то в окна, которые предположительно не вызывают комбинацию клавиш Ctrl + M или Enter). – CrazyCasta

+0

Мысль теперь, когда я читал и понимаю вашу вторую часть, это очень приятно. Как вы думаете, будет ли какой-нибудь способ сделать, как iab «\ n» ...? – CrazyCasta

+0

Простите, я не проверял. Я просто придерживаюсь своего решения с сокращениями. –

1

<CR>, <Enter> и <C-M> все синонимы в Vim. Таким образом, это достаточно, чтобы определить это отображение:

:imap <buffer> <CR> <CR><C-R>=strftime("%Y-%m-%d %a %I:%M %p ")<CR> 

Я выбрал буфер локального отображения, потому что вы, вероятно, хотите только это для определенных типов файлов. Вы можете определить это для определенных типов файлов, добавив :autocmd Filetype <filetype> ..., и поместите их в свой ~/.vimrc. Но это становится громоздким, когда вы добавляете сопоставления и другие настройки для различных типов файлов. Лучше поместите команды в ~/.vim/ftplugin/<filetype>_mappings.vim. (Для этого требуется, что у вас есть :filetype plugin on.)

Это все еще не охватывает вклеенный текст. Я сомневаюсь, что вы действительно этого захотите (лучше добавить временные метки впоследствии), но вы можете изучить событие (недавно добавленное) TextChanged для его реализации.

Смежные вопросы