-1
我想以筆記記錄的方式改變我的習慣。以GTD方式使用Vim
我想在一個目錄下添加名爲YYYYmmddHHiiss.txt
文件,並開始他們這樣說:
=Call somebody (title of my note)
@work (context of my note)
!todo (type of the note, I'll use !inbox, !todo, !waiting, !someday and !reference, each one his habit)
#project_name
#call
#Name of the person
#other tags if needed...
Details...
我想的是:
- 使用Vim(無插件,只是內置功能;沒有外部程序;只有幾個autocmd,映射和我的personnal vimrc中的函數)
- 保存我所有的筆記在一個目錄中,並信任Vim和我的標籤來找到我需要的東西。
- 開始使用這種系統與這種類型的一個命令
:GtdGrep
,並想一會兒,如果我需要更多。
型號
:GtdGrep !todo @work
:GtdGrep !inbox
:GtdGrep @waiting @home
:GtdGrep !todo @work #this_project
:GtdGrep #name_of_a_co-worker #this_project
現在,我向你介紹我的需要,我就可以開始描述我的問題^^我想創建背後的功能:GtdGrep命令,但有很多事情我不沒有辦法收集......這是我的草案。
let gtd_dir=expand($HOME)."/Desktop/notes"
function! GtdGrep(...)
execute "silent! vimgrep /\%<10l".join(a:000, "\\_.*")."/j ".gtd_dir."/**"
execute "copen"
endfunction
command! -nargs=* GtdGrep call GtdGrep(<f-args>)
- 如何抑制第一空行前的搜索?我設法使用正則表達式
\%<10l
在前9行中查找我的標籤,但就是這樣。 - 如何查找我的標籤,無論他們在文件中的位置?我剛剛成功地用
\_.*
正則表達式對線進行了幾行回覆。 - 蛋糕上的結冰將會是quickfix窗口上的顯示重點放在筆記的標題部分(在
/^=
之後)。我認爲這可能是^=\zs.*\ze
,但對於我來說,在單個vimgrep中是太多了!
編輯
我通過以前的結果做連續使用vimgrep解決我的 「和」 使用vimgrep問題。這是一個好的解決方案嗎?
let gtd_dir=expand($HOME)."/Desktop/notes"
function! GtdGrep(...)
let dest = g:gtd_dir."/**"
for arg in a:000
execute "silent! vimgrep /^".arg."$/j ".dest
let dest = []
let results = getqflist()
if empty(results)
break
else
for res in results
call add(dest, bufname(res.bufnr))
endfor
let dest = join(dest, ' ')
endif
endfor
" Last vimgrep to focus on titles before displaying results
let results = getqflist()
if !empty(results)
echom dest
execute "silent! vimgrep /\\%<10l^=.*/j ".dest
execute "copen"
else
echom "No results"
endif
endfunction
command! -nargs=* GtdGrep call GtdGrep(<f-args>)
我想能限制第一個空行之前的行我使用vimgrep但我沒有成功做到這一點。任何想法?
您的評論對我的搜索模式是明智的。理想情況下,我想有可能在函數的參數中使用regexp。您提交的vimgrep命令用於搜索foo或bar或blah或其他任何內容。我需要的是建立一個AND正則表達式,在第一行看,任何順序的任何條款。任何想法來提高你的正則表達式?我在幾行('\ _。*')或任何順序('(?=。* foo)(?=。* bar)')中找到了一些線索,但不能同時搜索:/ –