vim:如何将<f5>映射为在光标所在的当前单词之前加上时间戳?

时间:2019-06-01 01:49:57

标签: vim

在vim中,当我按F5键时,我希望它在光标所在的单词之前添加一个时间戳。

例如:如果我有一个带有以下文本的文件:

the quick brown
fox jumps
over the lazy
dog

,然后我将光标放在单词jumps上的任何字母上时按F5键,然后我希望它在单词jumps之前添加一个时间戳,如下所示:

the quick brown
fox [ 12:34:50 20190531 ] jumps
over the lazy
dog

如果我将光标移动到单词dog中的任何字母上并按F5,则希望它看起来像这样:

the quick brown
fox [ 12:34:50 20190531 ] jumps
over the lazy
[ 12:34:58 20190531 ] dog

我目前在我的.vimrc中有这些行,无论光标在哪里,它们都会添加一个时间戳,但是我希望它更聪明一些,并在光标所在的当前单词之前添加时间戳:

nmap <F5> i<C-R>=strftime("[ %H:%M:%S %Y%m%d ] ")<CR>
imap <F5> <C-R>=strftime("[ %H:%M:%S %Y%m%d ] ")<CR>

2 个答案:

答案 0 :(得分:2)

最安全的选择是在此处使用可视模式:

nnoremap <F5> viWo<Esc>"=strftime("[ %H:%M:%S %Y%m%d ] ")<CR>gP
inoremap <F5> <C-O>viWo<Esc><C-R>=strftime("[ %H:%M:%S %Y%m%d ] ")<CR>

也就是说,进入可视模式,选择内部WORD,转到选择的开始,结束可视模式,放入strftime()。

答案 1 :(得分:1)

尝试以下方法:

nnoremap <F5> T<space>i<C-r>=strftime("[ %H:%M:%S %Y%m%d ] ")<cr><esc>
inoremap <F5> <C-o>T<space><C-r>=strftime("[ %H:%M:%S %Y%m%d ] ")<cr>

由于大写字母T<space>,它使用t向后移动(T / T)下一个空格。明确的空格(也可以使用,使用<space>突出显示。