2017-01-02 21 views
-1

私はメモを取る方法で自分の癖を変えたいと思っています。私は、ディレクトリ内YYYYmmddHHiiss.txtという名前のファイルを追加し、それらをこのように起動したいGTDでのVimの使用

:私が好きな

=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の(なしプラグイン、ちょうどビルトイン機能を使用して
  • ;外部プログラムなし、個人的なvimrcのほんのいくつかの自動作成、マッピング、関数)
  • すべてのマイノートを1つのディレクトリに保存し、必要なものを見つけるためにVimとmyタグを信頼します。
  • この種のコマンドを1つ使用してこのシステムを使用し始める場合は、:GtdGrepと思ってください。

モデル

:GtdGrep !todo @work 
:GtdGrep !inbox 
:GtdGrep @waiting @home 
:GtdGrep !todo @work #this_project 
:GtdGrep #name_of_a_co-worker #this_project 

今、私はあなたに私の必要性を導入したことを、私は後ろに関数を作成したい^^私の問題を説明起動することができます。GtdGrepコマンドが、たくさんのIドンがあります集めて管理する...ここに私の草案です。最初の空行の前に検索を抑制する方法

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>) 
  1. ?私は最初の9行で正規表現\%<10lでタグを探しましたが、それだけです。
  2. ファイル内の位置に関係なくタグを検索するにはどうすればよいですか?私はちょうど復帰用の\_.* regexpでいくつかの行にgrepを実行するのに成功しました。
  3. ケーキのアイシングは、クイックフィックスウィンドウの表示が私のメモのタイトル部分(/^=の後)に焦点を当てることになります。私は^=\zs.*\zeで可能だと思うが、それは1つのvimgrepで私にとっては大変だ!

EDIT私は、以前の結果に連続vimgrepを行うことで、私の "AND" 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を拘束したいのですが、私はこれを行うには成功しませんでした。何か案が?

答えて

0

まず、動的文字列をパターンとして使用する場合、リスクを知っておく必要があります。例えば。あなたのPROJECT_NAMEこのコマンドを構築する、であるあなたが試すことができますどのような[].*()...

が含まれています

vimgrep '/\%<10l\(foo\|bar\|blah\|whatever\)' path/* 
+0

私の検索パターンについてのコメントが賢明です。理想的には、関数の引数にregexpを使用する可能性があります。あなたが提出するvimgrepコマンドは、foo OR barまたはblah ORを検索するためのものです。私が必要とするのは、どのような順序であっても、最初の行を見てAND正規表現を構築することです。あなたのregexpを改善するための任意のアイデア?私はいくつかの行( '\ _。*')または任意の順序( '??​​。* foo)(?=。* bar)'で検索するためのいくつかの手掛かりを発見しましたが、 –

関連する問題