Custom Vim命令根据当天打开文件

时间:2018-02-14 16:36:13

标签: vim

我正在尝试简化流程并根据日期自动打开或创建文件。我一整天都去看这个文件。在我使用下面的命令之前,我必须导航到该文件,或者在那天创建它。

map <Leader>gn :e ~/Dropbox/notes<cr>

我正在玩这样的事情。它有效,唯一的问题是它没有打开文件,我必须点击,gt然后enter。上面的命令将打开文件夹而不按Enter键。

map <Leader>gt :e ~/Dropbox/notes/journal/<C-r>=strftime("%Y-%m-%d") . '.md'<cr>

2 个答案:

答案 0 :(得分:1)

任何时候Vim都在等待映射中的Enter,您只需添加另一个<cr>

如果该文件已存在,则会将光标向下移动一行,以便保持一致,让我们添加G将您带到文件的底部(&#39;毕竟,日记。将其更改为:

map <Leader>gt :e ~/Dropbox/notes/journal/<C-r>=strftime("%Y-%m-%d") . '.md'<cr><cr>G

答案 1 :(得分:0)

Vimscript的评估方式与:命令行中输入的Ex命令完全相同。 ex中没有变量,因此无法指定它们。以交互方式键入命令时,您可能使用<C-R>=插入变量内容:

:sleep <C-R>=timetowait<CR>m<CR>

...但在脚本中,必须使用:execute。它在映射中通常更具可读性。 (这就是为什么我将此添加到接受的答案中。)必须引用Ex命令的所有文字部分(单引号或双引号),然后与变量连接:

execute 'sleep' timetowait . 'm'

你的例子

map <Leader>gt :execute 'e ~/Dropbox/notes/journal/' . strftime("%Y-%m-%d") . '.md'<cr>G

变体printf()(当有许多标识符时更具可读性:

map <Leader>gt :execute printf('e ~/Dropbox/notes/journal/%s.md', strftime("%Y-%m-%d"))<cr>G

另一种选择是:help map-expr

map <expr> <Leader>gt printf(":e ~/Dropbox/notes/journal/%s.md\<CR>G", strftime("%Y-%m-%d"))

其他批评

  • You should use :noremap;它使映射不受重映射和递归的影响。
  • 此外,这通常仅从普通模式有意义,因此:nnoremap将是理想的。