« 2011年3月 | トップページ | 2011年5月 »

2011年4月

2011年4月30日 (土)

ウォーキング(walking)・適度に休憩することの大事

ウォーキング(walking)・適度に休憩することの大事

Time-stamp: "Sat Jan 15 13:06:41 JST 2011"

一人で歩くときは適切に休みを取ってない。時計を見てない。万歩計は常に 着用している。それに時計が付いている。それをいいことに腕時計をしなく なった。そのため休憩のタイミングを決められていない。何処に到達したか を手帳に記録するために時刻は見るのだが。毎日決まった経路を歩くのでは ないため休憩場所を想定して出掛けてない。次に出掛けるときは腕時計をし ようと思う。大体1時間毎に休憩するのがよさそうだ。

平成23年1月5日(水)に自宅から児島駅までの約20キロメートルを歩く。まと もに休憩したのはゴール直前の野崎家旧宅でのトイレ休憩だけだった。翌朝 は歩くのが辛かった。翌々日も歩く気にならない。土曜日にようやく膝や脚 の痛みを感じなくなる。そして1月9日(日)に倉敷市民歩く日に出掛ける。足 高山の急斜面は応えたが膝の痛みは酷くない。リーダーが居るために適度な 休憩を取るのがよいのではなかろうかと考える。年寄りが多いせいか(自分 もそうだが)トイレ休憩を30分から1時間の内に取る。毎回トイレに入るわけ ではないが待ち時間は休憩になる。5分から10分程度の休みがとても効果的 な気がする。

一人歩きだと自分で休憩のタイミングを取らないといけない。これまでの一 人での遠出では殆ど休憩を取っていない。そのための無理で膝を痛めている 気がする。一人で歩くときは時計を見ながら休憩場所を考えることが必要と 考える。

ふつうに仕事をするときは2時間くらい毎に休憩する。朝8時半から事務仕事 を始めた人達は10時に小休止する。昼12時から一時間の昼食に入る。13時に 仕事を再開したら15時に休憩し17時に終業とする。ある市役所で15時の休憩 時間にラジオ体操を放送している。放送に合わせて実際に身体を動かしてい るのを見たことはない。しかし仕事の手を休めて背伸びをするくらいはあ る。接客の少ない部署なら本当に体操しているかもしれない。17時をすぎる と少し休んで残業する人もいるだろう。農業とか建築土木業などの3K1Yな仕 事(きつい、きたない、危険そして屋根がない(屋外作業))は1時間くらいで 休憩する。力仕事なら30分置きくらいの休憩となろう。

小学校は45分、中学・高校は50分そして大学は90分授業だった気がする。そ れくらいが先生・学生ともに集中力の限界であり休憩すべきということだろ う。もっとも小学校低学年ともなると30分持たせるのは難しいと聞いたこと がある。中学のときに来年4月から小学校へ赴任することになるという先生 が授業の後半は勉強にならなくて大変だと言っていた。何にしても休憩は必 要である。

歩くことは机の前に座った事務仕事に比べて肉体労働である。そのため2時 間毎の休憩というのでは少ない。1時間ごとに5分間くらい休むのがよさそう である。疲れやすいとか身体が不自由とかの問題がない健康な人にとって歩 くことはとても楽なことである。健康のための歩きでは運動量を稼がないこ とにはウォーキングの効果が出ないとついつい無理をしてしまう。

毎日同じコースを歩くのではなくて、その日の気分で足の向くまま気の向く ままに歩くときは、どの道を行こうかと考えるばかりで時間の経つのを忘れ てしまう。気がつけば歩き始めてから1時間を過ぎている。道端にベンチで もあれば好都合なのだが休もうとするちょうどの場所にはない。少し手前に あったのだがと気付いても引き返すことはできない。

道端に「たたずむ」とか「しゃがむ」ことで休憩になるのだが人目が気にな り歩きを止められない。動きのあるもの、なかでも急加速とか急減速などの 加速度を伴なうものに目が引き付けられる。歩いている人が急に立ち止まる と何をしているのだろうと注目する。辺りに人影が見えなくてもどこかの誰 かに見られているものである。それが頭をよぎると休憩は面倒と通りすぎて しまい休むタイミングを逃がしてしまう。

百人規模の「歩く会」で歩くのと千人規模の「ほにゃら(ツーデー)マーチ」 で歩くのとでは疲れ方に違いがある。同じ距離を歩いても「歩く会」のほう が疲れない。「歩く会」は団体歩行であり「ツーデーマーチ」は自由歩行に なる。どちらにもリーダー(先導役、先駆け)とアンカー(追尾役、しんがり) が居る。基本的には歩道を歩くとしても必らず車道との交差がある。車道を 横切る際には交通信号機により隊列が途切れ途切れになりやすい。そこで団 体歩行では臨機応変に列詰めをして一隊になるように調整をしながら進む。 百人規模なら中間にも世話役を配置しておくことで一隊での行動ができる。 どこを休憩場所にするかは予め主催者が計画しており、概ね出発後一時間以 内の適切な頃合いで隊列の全員が一斉に休憩する。

(注)日本語の「リーダー」は、あるグループを束ねる代表という意味に使う ことが多い。そのため英語によるマラソン実況放送において先頭走者に leaderの字幕が入っているのを怪訝に思う。その一方で先に行くことを「 リードする」と言う。leadには引っ張る、導く、指揮するなどの意味があ る。英語のleaderには集団を指揮する人を表す意味の他に先頭に居て集団を 引っ張る(導く)人も意味する(その人が集団を指揮していると言えなくもな いが、とりあえず誰かに先頭を任せて本当の指揮者は先頭集団の見通しのよ いところに居ることが多いようである)。leaderを取り入れた日本語の「 リーダー」はもっぱら集団を指揮する人を指すようである。ウォーキング会 で先頭を歩く人を「リーダー」と呼ばない。当日の役員紹介で「○○さんが 先頭を歩き、△△さんがアンカーをつとめます」と話すのを聞くことが多 い。

千人規模の「ツーデーマーチ」では隊列が非常に長くなる。先頭付近の人達 が休憩に入ってから30分をすぎても次々に後続の人達が到着するのでは全員 一斉の休憩は取れない。早くに到着した人は休憩を終えて出発したいだろ う。後から遅れて到着した人の休憩時間は短かくなってしまう。そこで休憩 を何処でどれくらいの時間とするかは参加者個人に任せることにするのが自 由歩行である。目的地までへの無理のない最終到着時刻が決められており、 その時間内に歩き終えることが求められる。

長距離マーチでは隊列が途切れがちになり前を歩く人影を見失う場合もあ る。間違えやすい曲がり角とか別れ道には案内標識や案内人を配置して不案 内な遠来からの参加者に備える。案内人はアンカーの通過を見届けるまでは 持ち場を離れないで迷子が出ないよう気を配る。

JR瀬戸大橋線茶屋町駅まで徒歩20分の我が家からJR瀬戸大橋線児島駅までを 歩いてみる。平成2年(1990年)に廃止された下津井電鉄の線路跡が自転車道 として整備されている(茶屋町と児島間は昭和47年(1972年)に廃止される。 その後は児島と下津井間で存続したのだが平成2年に全線廃止となる)。一部 は県道の歩道となったり、あるいは生活道となり途切れている箇所もあるが 交通量は少なく歩くには安全快適である。

同じ経路を出発地点を入れ換えて二度歩いてみる。第一回めは道不案内も あって遠回りしたりする。ゴールの児島駅まで残り1時間のところで早くも 膝の痛みを覚える。平地はそれほどでないが階段とかスロープの下りで膝が 痛い。

膝の痛みは翌朝にはさらに酷くなる。最寄り茶屋町駅までの20分間の歩きが ヒョコタンヒョコタンとぎこちない傍目(はため)からも気の毒がられるほど の歩き方になる。左足を前に出す度に膝が痛む。

こんなことでは3月に参加する予定の瀬戸内倉敷ツーデーマーチに不安があ る。20キロコースへ参加したいとおもう。今回歩いた散歩道は万歩計の申告 するところでは20キロくらいある。途中に山間部を通るもののその高低差は 100メートルくらいだろう。山裾を廻り込むという感じで200メートル級の福 南山と正面山の山合いを通る。それらのテッペンまでは相当な高低差に見え る。

ツーデーマーチの20キロコースにそれほどの高低差はない。それなりの時間 は掛かるが今回の散歩よりは楽なはずである。体調がよければ高低差のある 40キロコースにしたい気持ちもある。実は今回歩いた道のほとんどがツーデ マーチの40キロコースに含まれている。40キロよりはうんと楽なはずなの に、今回の児島行き20キロ歩行の翌朝は左足を前に出す度に膝がズキンズキ ンと痛む。

困った。こんなことではツーデーマーチ20キロ参加するには気が重い。今ま で体験した歩きの中に何かヒントはないかと考え込む。最初に参加したツー デーマーチの体験の中にヒントはあった。コース後半の足に疲れがたまり痛 みもあるヨレヨレ状態になっている頃のことである。休むことなく黙々と歩 き続ける私の横を足早に通り抜ける自分より年上と思われる人が居た。そし て同じ人がかなりな時間の間隔(40分とか50分くらいだろうか)を置いた後に 二回、三回と横を追い抜いてゆく。その人の後に付いてゆく元気は残ってい ない。悔しかった思いだけが残る。自分より若い人に追い抜かれるのは仕方 ない。体力で劣るのだから。しかし自分より年寄りな人に抜かれるとは情け ない。こちらは初心者なのだからと自分に言い聞かせるしかなかった。

その人の足が私より速いことは間違いない。二回も三回も同じ人に追い抜か れるということはその人が上手に休憩していることである。おとぎ話の兎は 休みすぎて亀に負けたけれど上手に休憩を取るならそんなことはないのであ る。

具体的な数字を入れて考える。普通に歩く速さは時速4キロメートルと言わ れる。やや早足なら時速5キロメートルになる。暗算に便利な分速80メート ル(時速なら4.8km/h)で45分間歩き5分間の休憩を取る。結局50分間に3600 メートルだけ進む。同じ距離を50分掛けて休みなしの一定速度で歩く速さは 分速72メートル(時速4.32km/h)になる。両者が同時に歩き始めて45分後に遅 い人は1分毎に8メートル遅れの360メートル手前に居る。速い人が5分間の休 憩を取る間に遅い人が追い付くことになる。

(注)分速80メートルは「歩く会」での標準的な速さと思う。ゆっくりなら分 速70メートルくらいになる。ツーデーマーチの40キロは午前7時出発で午後5 時までの10時間を制限時間とする。普通に言われる時速4キロの歩きでピッ タリ10時間になる。しかし昼食時間や途中で取る休憩があるから時速4キロ を超えてなければ制限内のゴールにはならない。分速80メートルで50分間歩 き10分間休憩することを10セット繰り返すと40キロになる。最後の休憩は ゴール後になるので590分で歩き終わる。休憩時間を少しずつ削るか分速で 稼ぐとかとすれば時間短縮できる。もっともそのぶん疲れが溜り翌日に差し 支えることを覚悟しなければならない。

二つ目のヒントは「歩く会」での20キロ歩行と「大規模マーチ」での20キロ 歩行とを比べると「歩く会」のほうが楽に思えることにある。「歩く会」は 団体歩行であるため定期的に一斉に休憩を取る。「マーチ」では隊列が長大 になるため休憩の取り方は参加者の自由に任される。自分の判断というとこ ろが曲者である。長大な隊列から離れて休憩を取っているとき目の前を行き 過ぎる人達を見ると取り残されてしまう思いが強く気が気ではない。早々に 休憩を打ち切って隊列に復帰したくなる。それがストレスとなりついつい休 憩時間を短かくして無理をする。

一人歩きでは自分自身がリーダー(間違いなく自分が先頭なのだから、ここ では指揮者という意味合い)になるしかない。誰も休憩をアドバイスしては くれない。歩き慣れた道なら何処が休憩向きかを思い浮かべられる。そうで ない初めてのコースなら時計を見ながら適切な休憩場所を探すことになる。

退職してから腕時計をしなくなった。力仕事とか畑仕事では腕時計が邪魔に なることが多い。狭いところに左腕を差し込んで作業する際に腕時計が周り の出っ張りに引掛ったりしてうっとうしい。ウォーキングを始めてから万歩 計を使うようになる。これに時計が付いていることをいいことに腕時計を使 わなくなる。

一昔まえの万歩計は機械式であった。歩く度にカチャチャという音がするこ と、そして万歩計を身に付ける場所がズボンのベルト辺りの腰に限定される 不便があった。歩くときの腰の動きで揺れる振り子により機械式時計のメカ ニズムで歩数を表す指針を回転させる仕組みであった。

装着箇所が腰であったためにトイレで取り落すことがある。そして歩き始め に歩数の指針をゼロにリセットする面倒があった。現在は半導体式の加速度 センサーを使うため歩く度の音はなくなった。しかも腰でなくとも胸とか腰 のポケットあるいは鞄の中に入れておいてもよい。また時計機能を持ってい るので真夜中の午前零時に歩数を自動的にリセットしてくれる。歩いている ときに取り出せばすぐに現在の歩数と時刻を知ることができる。

万歩計に時計機能が付いているために歩くときに限らず普段の外出時も腕時 計をしなくなる。腕時計をしないことが一人歩きで休憩を取るタイミングを 決める際の障害になろうとは予想できなかった。万歩計はポケットから取り 出さないことには現在時刻が読めない。ポケットから取り出して表示ディス プレイを見る。つまみ出したときの本体の向きによりすぐに時刻が読めると は限らない。引っくり返さなければならないかもしれない。歩きながらモゾ モゾやっていると足元への注意がおろそかになりつまずくことにもなる。

時刻を見るということからいうと万歩計は腕時計の便利に大きく負ける。基 本的にウォーキングは両手に何も持たない手ぶらで歩く。腕時計なら胸の前 に腕を上げるだけで時刻が読める。裏返すことはない。万歩計の確認には 二、三秒かかるに対して腕時計なら一瞬で読み取れる。二、三分毎の時刻確 認も苦にならない。周りのベンチを探しながら腕時計を見て休憩を決断する ことがスムーズにできる。

二回目の歩行では休憩のタイミングを決めやすくするために腕時計をする。 40分をすぎたら1時間になるまでに休憩場所を見つけるようにする。トイレ のある公園というようなうってつけな場所はそうそう見つからない。記念碑 とか名所解説板などがあったら立ち止まり手帳を取り出して現在時刻とか周 りに見える建物名とか看板とかを記録する。背伸びや足の屈伸などのスト レッチをしたりする。ボーッと突っ立っていたのでは不審者に見られるかも しれないのでウォーキング中の休憩に見えるようにふるまう。

まとまった時間の休憩を取れる場所は少ない。そこで立ち止まっても不審 に思われないところでは積極的に休むことにする。日頃の癖ゆえか前方に青信 号があると駆け出したくなる。赤信号の待ち時間を惜しむのである。歩道と車 道の間には段差があり、そこを駆け足で通ることは足腰の負担となる。青点滅 を無理して駆け抜けようとして転んだら怪我するかもしれない。

前方に青信号を見つけたら休むチャンスと見て急ぐことをしない。信号待ち で一、二分の休憩が取れる。そして信号待ちの人は怪しまれない。このよう な好機を逃がしてはいけない。ゴール寸前では早くたどり着きたいだろうが 最後の無理がたたることはよくある。決して急いではいけない。

二回目の歩きでは以上のような休憩を心掛けたお陰か翌朝の歩きで異常を感 じなかった。歩いているとき膝に多少の痛みはあり昨日の疲れが残っている ことは間違いない。しかし一歩毎にズキンズキンと痛むようなことはない。 最長5分間でしかなかったが、休憩の効果を思い知ることとなった。

(1)平成23年1月5日(水)
13:40散歩出発。14:05彦崎渡辺医院宇野線ガード。14:27串田橋(郷内川)。 14:35エブリィ(スーパー)、熊野神社入り口。14:52瀬戸中央道下。15:14再 び瀬戸中央道下をくぐる。溜池あり。15:21福南山バス停、溜池あり。15:52 倉敷市立短気大学そば、大きな交差点あり。15:54稗田駅(下電)跡、ホー ム、駅名標の文字はっきり。ここまでに道を失なう。道路の歩道になってい る区間は紛らわしい。自転車道の標識で茶屋町駅からの距離は福南山登りま でにしかない。児島側には距離の案内がない。16:10児島小学校、柳田(やな いだ)駅跡(駅名標にみ)。16:35野崎家旧宅、トイレ休憩。16:59児島駅着。 17:10児島駅発230円。17:19茶屋町駅着。17:41帰宅。風はそよ風程度に弱く なった。30200歩。
(2)平成23年1月11日(火)
13:37散歩出発。14:06茶屋町駅発普通児島行きに乗る。茶屋→児島230円。 14:27児島駅。14:40瀬戸大橋架橋記念館が解体中に見える。14:45野崎家旧 宅。15:00小川歩道橋、元下電跡。15:08セロリー脇、柳田駅名標。15:12児 島小学校、児童多数下校中。15:23下電跡地自転車道脇にベンチあり、休憩5 分、晴れ風少し。15:32稗田駅跡ホーム名残あり、駅名標、下電由来説明板 あり。稗田さくら公園便所建設工事中、ホーム跡前。工期平成23年3月15 日、瀬戸内倉敷ツーデーマーチに間に合う。15:41瀬戸中央自動車道下手前 稗田西交差点で信号機を渡る。県道の側道になり間違えやすいところ、お好 み焼きコーヒーのアンアンにヨットが飾り付けてある。ピンクの建物が目立 つ。15:58児島縫製センター入口バス停、内海清掃工場のところから県道の 側道になる。16:06福南山バス停。16:13瀬戸中央自動車道下をくぐる。 16:24茶屋町から7.0km標識を通る、中央倉庫、リョーショクの倉庫が見え る。瀬戸中央道水島インターが見える。道端で休憩5分取る。16:55郷内陸 橋、郷内川渡る。チクバ外科そば曽原口バス停ベンチで休憩5分。17:07犬淵 公園・公民館、藤戸寺まで3.1km標識あり。17:13串田橋手前右折し県道を横 切る。17:31瀬戸大橋線下をくぐる(小学生の迂回路)。17:38宇野線ガード (渡部医院そば)くぐる。18:05帰宅。28900歩。

ツーデーマーチ40キロのゴールからスタート地点まで戻るシャトルバスか ら降りたとき、足とくに右膝に激痛を感じてビッコ(跛)を引く。自宅まで自転 車で40 分の道のりをよく帰れたものと思うくらいに痛かった。二、三日は自 宅内の移動にも不自由する。

どうしてここまでくたびれたのだろう。無理をしたことは間違いない。それ まで定期的に歩くということをしないでいきなり40キロ歩いたのだから。そ れにしても足が痛くなるには他にも原因があるに違いない。まずは靴を疑 う。安物の無印運動靴の自分に比べて多くの人はウォーキング専用の靴を履 いているみたいである。

コース後半の疲れ切って右膝に痛みを感じ始めた頃に少しのスロープで右足 の着地時にペタンペタンと音を立てていることに気付く。これは痛む右膝に 衝撃となりそうな気がする。痛むから静かに歩けないのか静かに歩かないか ら痛めることになるのか、どちらにしても問題である。

そこでウォーキングシューズを新調してみたがそれほどの改善はない。足を 痛めないように作られている靴を履いているという安心感があるにすぎない と思う。馴染んでいる靴のほうが足元に気を取られない。結局もとの運動靴 に戻してしまう。

右膝の痛みを感じるのは階段を降りるとき、スロープを下るときがひどい。 対策として膝を伸ばしきることなく曲げたままの中腰で着地することを心掛 ける。いわゆる屁っぴり腰(屁をひるときは無意識のうちにお尻を後ろに突 き出した中腰で肛門を開き気味にする)で階段を降りる。そうすると自然に 歩幅が小さくなる。歩幅を小さくすると自然に中腰になる気もする。膝関節 を伸ばしきらないことで関節にかかる突き合わせの衝撃を柔らげようとす る。

急傾斜な場所では意識しなくても自然に中腰の前傾姿勢になる。そのほうが 身体にとって楽だからだろう。それを意識して大袈裟にやることにする。

一人で長距離を歩くのは疲れる。同じくらいの距離を団体で歩くに比べて疲 れる。その原因が上手に休憩を取れていないことだということに気付くまで に2年もかかってしまった。休憩すべきはウォーキングを奨める記事に必ら ず書いてある。あまりにもあっさりと書かれているため記憶に残らなかっ た。

焦らず、休憩をこまめに取ること
通常のウォーキングよりも意識して多めに休憩を取るようにしましょう。目 安としては、1時間歩いたら1回の休憩、または距離にして5キロメートルほ ど歩いたら1回休憩を入れる位が適しています。
<休憩時間の過ごし方>
1回の休憩時間は5~10分程度で、この間に水分やエネルギーの補給をしま す。また、足首を回したりアキレス腱を伸ばしたり、肩や首、腰を回したり して、固くなった筋肉をほぐしておくと疲労予防につながります。長い時 間、履きっぱなしのシューズ内は汗などで湿気がこもっており、そのまま履 き続けているとシューズの中で足が滑りやすく、マメや靴擦れの原因にもな ります。休憩時間を利用して、シューズを脱いで足を乾かし、靴下を履きか えるようにしましょう。

| | コメント (0) | トラックバック (0)

2011年4月20日 (水)

occur.vimを使う

occur.vimを使う

Time-stamp: "Sat Dec 18 13:58:33 JST 2010"

言うまでもなくoccurは「起こる(happen)」を意味する。検索結果を、ファ イル名、出現行番号、出現行の内容の順番でgrepコマンド(global regular expression print、包括的正規表現検索かな?)出力のように一覧表示する。 長大な文書で出現個数が多いときは原文を順番に見てゆくより便利である。

occur.vimの日本語の解説が見つからない(平成22年8月20日)。occur.vimを pluginディレクトリに入れるだけで動く(ただしvimの再起動でoccur.vimを 読み込ませる)。vimに備わっているquickfix機能(コンパイルエラーなどの 一覧表示機能)を使って検索結果を一覧表示する。

「/または?」コマンドで検索したのちに「:Occur」を打つと現在バッファで の検索結果を一覧表示する。「:Moccur」を使うとvimで開いているすべての バッファに対する一覧表示になる。このことは「:Moccur」コマンドによら なくてもそうなる。

実はvimにおいて「/または?」コマンドにより一つのバッファを検索する と、同時に開いている他のバッファ(画面に表示されてないバッファ)でも検 索を実行したバッファでの検索語がハイライトでされていることに気付く。 本人は今見ているバッファ(ウィンドウ)でのみ検索しているつもりでも、そ の画面の裏に隠れているバッファにも同じ検索が密かに実行されている。

カーソル下の単語検索は「:StarOccur」でvimが開いている全バッファの結 果一覧になる。このコマンドではカーソルのある単語で「*」コマンドを使 わなくてよい。検索したい単語にカーソルを置いたらすぐに 「:StarOccur」を使う。

キーバインディングはスクリプトに書かれている。「/または?」検索のあと (検索文字列入力後にenterを押す、インクリメンタルな検索はできない)に 「\oc」なら「:Occur」であり「\mo」なら「:Moccur」になる。「*」はカー ソル下の単語を探す。「\*」で全バッファからの結果一覧になる(予め「*」 で単語検索しなくとも、いきなり「\*」が使える)。

私はoccur.vimとともにchangelog.vimを使っている。こちらではChangeLog ファイルの呼び出しに「\o」(バックスラッシュと小文字のオー)を使う。 occur.vimで「\oc」を使う際にo(オー)とc(シー)の間を空けすぎると ChangeLogバッファが現われる。

残念ながらoccur.vimにはコメントが書かれていない。vim公式(本家)サイト のスクリプトダウンロードページにある使い方が唯一の解説になる。

検索結果を一覧するquickfixリストバッファ(もちろんコマンドモード固定 のインサートモードにはならない書き込み禁止バッファである)において 「x」を打つと、カーソルのある結果行を含むファイルのバッファにおい て、その行を画面上下幅の中央に表示する。

またスペースを打つとquickfixリストバッファが最大高さになる(他のバッ ファは一行表示になる)。「q」によりquickfixリストバッファを閉じる。

``This script looks like 'occur' of emacs script.
Create a quickfix list using all lines in the buffer containing a match for regexp. Search for regexp in the current buffer or all buffers.
Search current buffer:
  1. Search the word by '/' command.
  2. :Occur
Search all buffers:
  1. Search the word by '/' command.
  2. :Moccur
Seach all buffers for occurrence of the word nearest to the cursor:
  1. move the cursor to the word
  2. :StarOccur
You can use keymappings of
<Leader>oc - Occur <Leader>mo - Moccur <Leader>* - StarOccur # The default <Leader> is backslash. (ex: \* = StarOccur) # (see :help mapleader) [QUICKFIX KEY-MAPPING] This plugin enhances quickfix key-mapping. (when this plugin opens the quickfix window.) <Space> : Set current window height to highest. x : Display the occurence the current line. q : Quit the quickfix window. If you want to disable this, then you can set the variable in the "vimrc". let g:occur_no_quickfix_map = 1 install details Copy occur.vim to your plugin directory.''

occur.vimのおおよその使い方が分かったところでそれがどのように動くの かをスクリプトから読み取ろうとする。vimの内蔵(オンライン?)ヘルプを 何度も繰りながら何日もかかってようやく概要(ユーザー定義関数Occur()の 動作)がつかめた。

occur.vimに現われるユーザー定義関数s:Occur()を解読する。関数名の冒頭 にある「s:」はスクリプトローカルを意味しておりスクリプトの内部からで ないとこの関数が使えない。どこからでもこの関数を利用できるように 「s:」を外す。

occur.vimに含まれるユーザー定義関数s:Occur()の定義から関数名の「s:」 を取り除いたOccur()は次の4行になる。この部分をvimのテキストファイル 編集画面から実行してみるために「名無しのvim使い」さん作のBatch.vimを 使う。

次はoccur.vimのユーザー定義関数Occur()を抜き出したものである。

function! Occur()
   let expr = 'caddexpr expand("%") . ":" . line(".") . ":" . getline(".")'
   exec 'silent keepjumps g/' . @/ . '/' . expr
endfunction

ユーザー定義関数Occur()をBatch.vimにより実際に定義(インストール)する に先立って、ここに現われる組み込み関数(内蔵関数、built-in function) が何をしているかをヘルプから下調べする。expand("%")は「:help expand」に説明がある。「%」は現在のファイル名を表す。現在編集中のテ キストファイルのバッファで「:echo expand("%")」を実行するとそのテキ ストファイルのファイル名が返る。

line(".")については「:help line」に解説がある。「.」はカーソルの位置 を表しline(".")によりカーソルのある位置の行番号が返る。getline(".") については「:help getline」にヘルプがある。「.」はやはりカーソル位置 でありgetline(".")はカーソルのある行の文字列を取得する。

テキストファイル編集中のバッファのコマンドモードで「:echo line(".")」や「:echo getline(".")」を実行してみるとよい。前者なら カーソルのある行の行番号がミニバッファに表示される。後者であればカー ソルのある行の内容がミニバッファに現われる。

関数Occur()の定義の2行目にあるcaddexprのヘルプを見るために「:help caddexpr」で表示されるヘルプにOccur()関数定義2行目の後半部が説明の例 に現われていることに気付く。

vim/doc/quickfix.txtで取り上げられている例:
:g/mypattern/caddexpr expand("%") . ":" . line(".") .  ":" . getline(".")

そして実はその例示の前半部がOccur()定義の3行目に現われている。あちこ ちとヘルプを繰っている間はこのことを見逃している。絡繰り(からくり)が 分かったあとで気が付く鈍感であった。

Occur()関数の定義3行目はexコマンドのグローバル検索を実行する。

:[address]g[!]/pattern/[commands]

patternを含むすべての行、またはaddressが指定されたときはその範囲のす べての行に対して、commandsを実行する。commandsが指定されなければ、そ うした行すべてを表示する。!が指定されたときは、patternを含まないすべ ての行にcommandsを実行する。なお、括弧[]は省略可能なものを表している ([]内が省略可能なものであることはunixな世界のコマンド解説における常 識になっている)。

このテキストファイルを編集しているvimのコマンドモードで「:g/vim/」を 実行すると文字列「vim」を含む行の行番号とその内容がズラズラと表示さ れる(この文章中に多く現われる文字列「vim」を例として使っている)。「: g/vim/」の末尾のスラッシュの後にコマンドが書かれていないので見つけた 文字列「vim」を含む行の情報(行番号と行内容)の表示になる。

Occur()関数定義における一番の難解はその3行目にあるg/pattern/commands のパターン部分に含まれる「@/」である。前後にクォートで囲まれた文字列 があり、それらをピリオドで連結している。そんな中で@/及びexprはクォー トで囲まれない。たぶんそれらは文字列変数である。exprは直前の行で定義 されている。

exec 'silent keepjumps g/' . @/ . '/' . expr

幸いなことに「:help @/」で「@/」の手掛かりがつかめる。「/」は最終検 索パターンレジスタ("/)であるという。最後に使われたパターンが蓄えられ る。その内容が「@/」で読み出せるということらしい。試しに「/」で何か の文字列を検索した後で「:echo @/」とすると直前の検索で使用したパター ンがミニバッファに表示される。「@/」の代りに「"/」を使うとエラーにな る。

実はOccur()関数定義の2行目と3行目は長すぎる一つのコマンドを二行に分 けて書いたものになっている。2行目はexprという文字列を定義している。

let expr = 'caddexpr expand("%") . ":" . line(".") . ":" . getline(".")'

Batch.vimを使うとexprの内容を見ることができる。まず、コマンドモード から「:numBatch」を打つ。numは上記代入式の行番号である。次に「: echo expr」で変数exprの内容が次のようにミニバッファに現われる。

caddexpr expand("%") . ":" . line(".") . ":" .  getline(".")

ここでcaddexprが何かは「:help caddexpr」によるヘルプに解説がある。

:cad[dexpr] {expr}
{expr}を評価し、結果の行を現在のQuickFixリストに追加する。QuickFixリ ストがまだ無い場合は、新しいリストが作成される。現在のカーソル位置は 変わらない。より詳しくは|:cexpr|を参照。
例: >
:g/mypattern/caddexpr expand("%") . ":" . line(".") . ":" . getline(".")

説明の最終行にある例示をそのまま実行しているのがOccur()関数になる。 なお、exprはexpression(表現)の省略である。

quickfixリストについては「:help quickfix」によるヘルプを読む。それに よるとquickfixリストを表示するには「:cw[indow]」を使い、リストを閉じ るには「:ccl[ose]」を使う。なお、リストをクリアするには「:cexpr ""」 を使う(これはヘルプに書かれてないが実際に使って確かめることができ る。quickfixリストが表示されているときにこのコマンドを使ってみると、 リストの内容がクリアされる様子を見られる)。

「:numBatch」を実行したあとの変数exprの値は「:echo expr」で見ること ができる。これが上記のexpand, line, getlineの入ったものであるときに 「: exe[cute] expr」を実行してみる。見掛けは何も起こらない。カーソル が編集画面に戻るだけである。この後で「:cw(indow)」を打つとquickfixリ ストウィンドウが開き、その最終行に「:exe[cute] expr」を実行する前の カーソルのあった行のファイル名、行番号、行内容の文字列が表示される。

さらにOccur()関数定義の3行目に似せた「:exec 'g/vim/' . expr」を実行 してみる。そうすると実行前にカーソルのあった(アクティブな)バッファで 見つかる文字列「vim」がある最終行にカーソルが移動して止まる。そのあ とで「:cw[indow]」を実行するとquickfixウィンドウが開き文字列「vim」 が見つかったすべての行が一覧表示される。

今度はユーザー定義関数Occur()が使えるようにする。上記抜き書きの開始 行と終了行の行番号を引き数として「:num1,num2Batch」を実行する。num1 はfunction!が書かれた行番号であり、num2はendfunctionの行番号である。 ユーザー定義関数の一覧は「:function」で見ることができる。「: num1,num2Batch」(Occur()関数のインストール)を実行する前後に「: function」を実行することでちゃんとOccur()が定義されたかどうかを確か められる。ユーザー定義関数の内容は「:function Occur」で表示される。

occur.vimプラグインを入れない状態でも上記Occur()関数を定義(インス トール)してやればプラグインを使うのと同じようなことができる。先ず「: num1,num2Batch」を実行してOccur()関数が使えるようにインストールす る。次に「/」コマンドを使って文字列(例えば「vim」)を探すためにコマン ドモードで「/vim」を使う。さらにOccur()関数を使うべく「:call Occur()」を実行する(単に「:Occur()」とするとエディタのコマンドではあ りませんと拒否される。関数呼び出しの:callを使う)。カーソルがミニバッ ファから編集画面に戻ったら「:cw[indow]」を打つとquickfixウィンドウが 開いてファイル名、行番号、行内容の一覧表示となる。

occur.vimプラグインが入っていればvim起動時点でOccur()関数が定義され ているのでBatch.vimを使う必要はない。まず「/」コマンドを使って文字列 を検索する。ハイライトサーチを明示的に禁止してなければヒット箇所に着 色する。次に「:Occur」または「\oc」を使うことで検索結果の一覧表 (quickfixウィンドウ)が表示されることになる。

このときの検索パターンは最終検索パターンレジスタ「"/」に蓄えられて Occur()関数に「@/」で渡される。Occur()関数は渡された検索パターンを 使ってグローバル検索「: g/pattern/[commands]」により再検索して quickfixリストを作成するという段取りになる。

テキストエディタemacsのwindows版であるmeadowをvimと並行して使ってい る。meadowでは「M-x occur」でoccurが標準装備されている。vimでは occur.vimをプラグインディレクトリに入れるだけでoccurが使えるようにな る。今まで使ったことのないoccurという新しい道具がvimに加わることに なった。

| | コメント (0) | トラックバック (0)

« 2011年3月 | トップページ | 2011年5月 »