2019年5月21日火曜日

vim タグジャンプ作成



= vim タグジャンプ作成
[20140806 13:17]
[2019-05-21] にコードを少し改変
Windows + MSYS2上で作成

*と*で囲まれた日本語を含まない文字列をhowmではhowmフォルダ内のどこか
のファイルに、又howm以外であれば同じフォルダ内のファイルのどこかに書い
ておく。
別のファイルにその文字列を書いて、C-] を押せば *文字列*のあるファ
イルのその文字列の位値にジャンプする。
*文字列* を複数書いておれば一回 C-] を実行して :ts とすれば
その *文字列* のあるファイル一覧がでるので、そこからジャンプしても
いい。
ジャンプしてしまって、C-o でも戻れない時は :ls を叩けば 今まで開いた
ファイル一覧がでるので 行きたいファイルの番号がもし1なら :b 1
を叩けばいい。


tagsファイルはカレントディレクトリにもセットされる事になっているから、
howmだけでなく、個々の何かの別のファイルのフォルダでも利用できる。

tagsファイルがcp932でない場合、日本語ファイル名にジャンプしようとすると
ファイル名が字化けしてジャンプできない。


_gvimrcに以下設定
"howmにtagsファイルを作成
set tags+=e:\howm\tags


以下のコマンドを2つ作成し例えば以下のようにコマンドがある場所にパスを通す。
.bashrcに以下設定


●tags.plファイル作成
#!/bin/perl
while (<>) {
/^(.*):\*(.*)\*/;
print "$2\t$1\t/*$2*\n";
}

この文章をhowmで書いているとアスタリスクが隠れてしまうので以下アスタリ
スクを大文字で表現する
#!/bin/perl
while (<>) {
/^(.*):\*(.*)\*/;
print "$2\t$1\t/*$2*\n";
}

ダイヤモンド演算子で標準入力から一行ずつ読み
^行頭 .改行を除く任意の一文字 
*ゼロ回以上の繰り返し 
:より右 改行を除く任意の文字がゼロ以上繰り替し
:より左 *で囲まれた、改行を除く任意の文字がゼロ以上繰り替し
それを$1 $2 のそれぞれ入れる。
そしてそれを "$2\t$1\t/*$2*\n" の形式で出力する。


●tags.shァイル作成
#!/bin/sh
#  -dskip [デェレクトリです] の表示を消す
# -E 正規表現を使う -o マッチした該当箇所のみ表示
# \*[^*]{1,10}\*'  **で囲まれた1以上10以下の文字列
# -name *.* というパターンのファイルをすべて表示する

find . -name \*.* -print | xargs grep -E -o -dskip '\*[^*]{1,10}\*' | tags.pl > tags
sort tags | uniq > tags

find . -name \*.* -print | xargs -0 grep -E  -dskip  '\*[^*]+\*' | tags.pl| sort | uniq > tags
 のまちがい  2021/1/5追加

tags.shのコードを変える
https://hannsihannsyou.blogspot.com/2021/01/tagssh.html



●tags.plの動作
tags.plをつけない、以下のコマンドを実行すると
find . -name \*.* -print | xargs grep -E -o -dskip '\*[^*]{1,10}\*'

以下の出力となる。
./2012/06/2012-06-25-032201.txt:*mymyhelp*
./2012/06/2012-06-25-032250.txt:*mymyhelp*

tags.plを通すと以下のような感じとなる。
mymyhelp        ./2012/06/2012-06-25-032250.txt~    /*mymyhelp*
mymyhelp        ./2012/06/2012-06-27-152332.txt /*mymyhelp*



●MSYS2上でtags.shを実行すればtagsファイルが更新される
howmは<<<でジャンプ機能があるり サイトの説明では C-] でジャンプできる
となっているができなかった。

0 件のコメント:

コメントを投稿

About

参加ユーザー

連絡フォーム

名前

メール *

メッセージ *

ページ

Featured Posts