我一直在寻找适用于 Linux 的命令行日历程序。我意识到我应该只使用 vim。我希望能够轻松查看一周的待办事项列表。目前使用此命令:
data=$(unset split; echo -n "-c \""; for i in {6..0}; do if [ $i -ne 6 ] ; then split="vsplit"; else split="e"; fi; echo -n "$split $(date +"%F" -d"last sunday+$i day").txt|"; done; echo "\"") && precmd='-c "split todo.txt" -c "Calendar" -c "wincmd w"' && cmd="vim $precmd $data" && eval $cmd
在全屏终端中运行此程序,否则您将会度过一段糟糕的时光。需要此日历插件:https://github.com/mattn/calendar-vim 如果你没有 vim 日历插件,这个也可以用,但是没有日历:
data=$(unset split; echo -n "-c \""; for i in {6..0}; do if [ $i -ne 6 ] ; then split="vsplit"; else split="e"; fi; echo -n "$split $(date +"%F" -d"last sunday+$i day").txt|"; done; echo "\"") && precmd='-c "split todo.txt"' && cmd="vim $precmd $data" && eval $cmd
这正是我想要的,只是下方窗格不会加载我的滚动 todo.txt。如果我能让下方窗格加载我的 todo.txt,那就万事俱备了!我不明白为什么 vim 不接受我的:
-c "split todo.txt"
也请随意纠正我的可怕批评。
另外,我确实意识到 vim 日历插件具有“日记”功能,但据我所知,它不会按照我的要求拆分窗口。
谢谢!
编辑:这是一个更新的版本,它修复了在周日运行时出现的问题,还允许您指定周偏移量,即“vimcal 0”,“vimcal 1”,“vimcal -1”等。(当然,您需要创建脚本和/或别名)
data=$(unset split; unset day; echo -n "-c \""; for i in {6..0}; do if [ $i -ne 6 ] ; then split="vsplit"; else split="split"; fi; if [ `date +"%A"` = "Sunday" ] ; then day="sunday"; else day="last sunday"; fi; echo -n "$split $(date +"%F" -d"$day+$i day+$1 week").txt|"; done; echo "\"") && precmd='-c "edit todo.txt" -c "Calendar" -c "wincmd w"' && cd ~/Documents/todo && cmd="vim $precmd $data" && eval $cmd
答案1
Vim做执行:split todo.txt
;您将在 的输出中看到 (隐藏) 文件:ls!
。当您打印执行的命令行时 (通过替换eval
为echo
),问题就变得明显了:
vim -c "split todo.txt" -c "e 2013-10-05.txt|vsplit 2013-10-04.txt|vsplit 2013-10-03.txt|vsplit 2013-10-02.txt|vsplit 2013-10-01.txt|vsplit 2013-09-30.txt|vsplit 2013-09-29.txt|"
从默认的空缓冲区中,您可以:split
关闭 todo.txt 文件,然后在同一个窗口中关闭:edit
第一个日期文件。您需要交换两个打开命令,如下所示:
data=$(unset split; echo -n "-c \""; for i in {6..0}; do if [ $i -ne 6 ] ; then split="vsplit"; else split="split"; fi; echo -n "$split $(date +"%F" -d"last sunday+$i day").txt|"; done; echo "\"") && precmd='-c "edit todo.txt"' && cmd="vim $precmd $data" && eval $cmd