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 コード改変
#ファイルが: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を実行
タグジャンプ 日本語
[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とする
#検索文字列取得
$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
#...コマンド実行
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 件のコメント:
コメントを投稿