我正在尝试简化流程并根据日期自动打开或创建文件。我一整天都去看这个文件。在我使用下面的命令之前,我必须导航到该文件,或者在那天创建它。
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>
答案 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"))
:noremap
;它使映射不受重映射和递归的影响。:nnoremap
将是理想的。