2019年12月1日日曜日

vim 日本語キーワードにてタグジャンプする。 日本語版Ctr-]




2020/11/18
ubuntuでは.vimrcに以下の設定で日本語の単語にジャンプできた。
vモードで選択後Kでも日本語文にもジャンプできた

.vimrc
set tags+=/usr/share/vim/vim74/doc/tags-ja  docの日本語タグファイル
set keywordprg=help "linuxではデフォルトではmanになっている
nnoremap K <C-]>
vnoremap K <C-]>

ただしバイナリファイルなど入っていいてhelptagsとしてもエラーが出る場合は
自作tags.shを実行する必要がある
 1 #!/bin/sh
  2  find . -name \*.* -print | xargs grep -E -o -dskip '\*[^   *]+\*' | tags.pl| sort | uniq > tags





2020・11
動作エラーするので以下コード改変した


 タグジャンプ 日本語
[2019-12-01 10:55]
1. したいこと
日本語でもタグジャンプしたい
以下素人コマンドにて失礼。


2. 前提条件 これでは日本語ジャンプができない
先に以下のものを作成してあるデレクトリ−の中でカーソル下のキーワードで
Ctr-] とすると同じデレクトリ−の *キーワード* の部分にジャンプする
tagsファイル作成コマンドを、作成した。
元のファイルに戻るにはC-o。

tags.sh
#!/bin/sh
find . -name \*.* -print | xargs grep -E -o -dskip '\*[^   *]+\*' | tags.pl| sort | uniq > tags

tags.pl
#!/usr/bin/perl
use utf8;
while (<>) {
  /^(.*):\*(.*)\*/;
  print "$2\t$1\t/*$2*\n";
}



tags.shでtagsファイルができる。
word    ./tags_jump.pl  /*word*
word    ./test2.pl~ /*word*
word    ./test4.pl  /*word*
ポイ捨てゴミ    ./gomi.txt  /*ポイ捨てゴミ*
ポイ捨てゴミ    ./gomi.txt~ /*ポイ捨てゴミ*
ポイ捨てゴミ    ./tags_jump.pl~ /*ポイ捨てゴミ*
ポイ捨てゴミ    ./tags_jump.sh~ /*ポイ捨てゴミ*
場所    ./gomi.txt  /*場所*
場所    ./gomi.txt~ /*場所*

これでは *日本語* ではジャンプできない。
日本語が含まれていても、tagsファイル作成には問題がない。
ただC-]でジャンプできないだけ。残念ながらvimスクリプトは得意でないので、
他のコマンドを使ってジャンプ出来るようしてみた。



3. 日本語ジャンプする
ジャンプしたい文字列を選択ヤンク後C-@でジャンプ。
戻るときはq後リターン。
.vimrc
noremap <C-@> :so /home/moto/myprg/tags_jump.vim<CR>

tags_jump.vim
split /home/moto/myprg/yank_file.txt
normal ggdG"0p
set fileencoding=utf-8
wq
!tags_jump.pl

tags_jump.pl
#!/usr/bin/perl

#標準入出力時にその対象となるデータの文字コードを指定するもの、
#コメントアウトすると
#Wide character in print at .... とprint文の行を指定して表示される
binmode STDOUT, ':encoding(UTF-8)';

#open プラグマ
#ファイルの入出力のファイルの文字コードをUTF-8に指定
use open  ':encoding(UTF-8)';

#utf8プラグマ
#ソースコード内の日本語をそれをPerlで処理するため「内部文字列」に変換
#する必要があるらしい
use utf8;

$word;
$line;
$file;
$kensaku;

# 2020/11 コード改変
#yank_file.txt のfileformat(改行コード)がdosとなるので
#一番下のifでtrueとならない 
#ファイル開いた時dosとなる
#.vimrc設定を変更してunixとする  set fileformats=unix,dos,mac
#word 書き込みの時dosとなる 
#tag_jump.vimでset fileformat=unixとする

#ファイルが:set fileencoding=utr-8 でないと字化けする
#検索文字列取得
$inputfile = "yank_file.txt";
open (FILE, $inputfile) or die "$!";
while (<FILE>){
    $word = $_;
}
close (FILE);

#文字列最後の改行を削除
chomp($word);

#正規表現で利用される文字列を通常の文字として扱う。
#ワード文字以外のすべての文字の直前に\がつけられる。
$word = quotemeta($word);

#A=~ m/B/ と =~ //は同じか? mが省略しているだけか。
#うえで区切り文字に/以外を使う場合は mをつけないとダメなようだ。
#Aの文字列の中にBの文字列がないか調べる。
# ”で囲むと¥nは改行 変数はその中身が表示される。
#’ で囲むと¥nの文字として出力 変数はその変数名のまま表示。

#tagsから検索文字列(word)のある行を取得
#$lint = 'word  ./filename  /*word*'となる
$inputfile = "tags";
open (FILE, $inputfile) or die "$!";
while ($line = <FILE>){
    if ( $line =~ /^($word)\s(\S+)\s(\S+)/ ){
        $file = $2;
        $kensaku = $3
    }
}
close (FILE);

#検索文字列のあるファイルを開き検索文字列を検索
#...私はvim.nox-py2 を使っているので
$vim = 'vim.nox-py2 ';
#...vimでfileを開くと同時に$kensakuを実行

#コード改変$vim と $fileの間にスペースを入れる
$cmd = "$vim $file -c $kensaku";
#...コマンド実行

system ($cmd);


参考サイト
the code to rock
http://note103.hateblo.jp/entry/2016/09/26/092851
Perlで日本語が字化けしないよう

vimコマンドを端末から実行する
http://takafumi-s.hatenablog.com/entry/2016/01/06/203412
vim +":NeoBundleInstall" +:q
:NeoBundleInstall :q はvimのコマンド

1. Vimの起動引数
https://vim-jp.org/vimdoc-ja/starting.html
so[urce] file fileにかいたvimのexコマンドが実行される

26.4  シェルスクリプトから Vim を使う
 https://vim-jp.org/vimdoc-ja/usr_26.html#26.4
 内容はまくまくVimノートとほぼ同じ

まくまくVimノート
 https://maku77.github.io/vim/advanced/run-ex-script.html
Linux には同様のことを行う単独のコマンド ex が標準で付属しています。
Vim を起動しなくても、次のようにして ex スクリプトを任意のファイルに対
して実行できます。
$ ex input.txt < replace.ex



0 件のコメント:

コメントを投稿

About

参加ユーザー

連絡フォーム

名前

メール *

メッセージ *

ページ

Featured Posts