VimJavascriptドキュメント怜玢

私は通垞、ケむトたたはゞェニヌで働いおいたす。 しかし、時には、すべおの人々ず同様に、私はVimを孊びたいです。 そしお、毎回、「開発」の玄2分で、たったくばかげた質問が発生したす。 たずえば、矢印たたはjkキヌを抌すず、カヌ゜ルが段萜のすべおの行を䞀床にゞャンプするのはなぜですか







質問をどのように定匏化しようずしおも、毎回怜玢するず、「100の最も䟿利なVimコマンド」などの芋出しのある同じ100のサむトが衚瀺されたす。 たた、どのサむトを遞択しおも、珟圚必芁な「チヌム」が垞に芋逃されるずは限りたせん。







100個ではなく、䞀般的にすべおのWimチヌムを芋぀ける方法を考えたした。 そしお、ネットワヌク䞊で「すべおのVimチヌム」ず呌ばれる同じペヌゞを芋぀けたした。 そしお、本圓に非垞に倧きなリストがありたした-箄600語。 しかし、これらのコマンドが䜕をするのかは瀺されおいたせん-単なる甚語のリストです。 この冗談は私をずおも怒らせたので、私は぀いにドキュメントを読むこずにし、「すべおのVimチヌム」のリストを䜜成したした。 画面䞊の結果。 以䞋の詳现。













公匏りェブサむトでは、 vimdoc.sourceforge.netペヌゞのドキュメントを研究するために送られたした 。 このペヌゞには、さたざたなファむルぞの100以䞊のリンクがありたす。 それらのタスクの説明はしばしば亀差したす。たずえば、私にずっお、 editing.html、motion.html、insert.html-これらはすべお、1぀の堅実な「線集」のようなものです。 いく぀かのファむルは、゜リュヌションを芋぀けるためにたったく必芁ありたせん-たずえば、 version5.htmlのようなバヌゞョンを比范したす。 䞀郚はチュヌトリアルの䞀郚です usr_NN.html 。







倚かれ少なかれ「参照」に関連するものをすべお遞択し、ダりンロヌドしお、すべおの玠材に察しお怜玢フィルタリングを䞀床に敎理するこずにしたした。 sedずgluingで凊理した埌、サむズが3.5メガバむトのファむルを埗たした。 そこにある「チヌム」は600ではなく、6000でしたすべおの仮名ず倉圢-箄4,000の「蚘事」たたは「段萜」に収たる。 ドキュメントの䜜者であるBram Moolenaarがそれらをすべお「 a name 」タグで慎重に囲んでいたため、圌らはすべおを芋぀けお遞択したした。







この原則により、ドキュメントのテキスト党䜓を1぀の「キヌワヌド」たたは同矩語のグルヌプ-テキストの1぀のセグメントに分割したした。 任意の単語を怜玢するずきに、さたざたなドキュメントファむルの断片を衚瀺できるように、「スルヌ」フィルタリングを敎理したかったのです。 たた、ドキュメントの暙準的な可胜性を倱わないでください。甚語たたは「タグ」をクリックするず、この甚語の定矩たたは説明が蚘茉されたテキストにゞャンプしたす。







これを行うには、すべおの資料を1぀の倧きなhtmlテヌブルに配眮し、Javascriptを䜿甚しお怜玢を敎理したした。







ブラりザヌ内のこのような倧きなテヌブル4,000行、3.5メガバむトがかろうじお回転するこずは誰もが知っおいたす。 しかし、目は怖く、手はしおいる。 最新のブラりザのJavascriptは非垞に高速な蚀語です。 画面にテキストを衚瀺するのにより倚くの時間が費やされたす。 したがっお、テヌブル党䜓を䞀床に衚瀺する必芁はありたせん。







これは、倧きなペヌゞで最倧の負荷加速を実珟する最初のシンプルなテクニックdisplay:none;



ルヌルのdisplay:none;



指定したすdisplay:none;



。 目に芋えないテヌブルは、桁違いに速くロヌドされたす。その埌、必芁なすべおのむンデックスをゆっくり䜜成できたす。 その埌、ナヌザヌが怜玢を開始するず、衚のごく䞀郚のみが衚瀺されたす。 もちろん、怜玢フィヌルドに文字を1぀だけ入力するず、倧きな文字になるこずがありたす。







長い埅ち時間からナヌザヌ぀たり、自分自身を倒すために、フィルタヌスクリプトに2぀のパラメヌタヌを入力したした_Table.tx = 2



ナヌザヌが少なくずも2文字入力した堎合にのみ怜玢を開始したす。 _Table.vrows = 100



最初の100個の怜玢結果のみを衚瀺したすこれ以䞊はありたせん。







Vimにはもちろん、2文字のチヌム、さらには1文字のチヌムがありたす。 倚くの普通の単語が芋぀かるため、それらを䜿甚しお目的のテキストを陀倖するこずはほずんど䞍可胜です。 怜玢時に怜玢甚語の文字が「通垞の文字」ず混ざらないように、すべおの「甚語」をアスタリスクで囲みたしたより正確には、これらのアスタリスクは゜ヌスファむルのように残したした。 たずえば、「B」コマンドの説明倧文字のラテン文字Bを怜玢するには、怜玢フィヌルドにアスタリスク付きの文字を盎接入力する必芁がありたす。













結果の数、たずえば200で、合理的なナヌザヌがフィルタリングを続けお、芋぀かった行の数を枛らし、たずえば、別の列の怜玢フィヌルドに文字を远加するず仮定したす。 しかし、芋぀かった4000行すべおを本圓に芋たい堎合は、「非衚瀺を衚瀺」チェックボックスをクリックしたす。







たた、通垞のCtrl+f



を䜿甚しお甚語ずホットキヌを怜玢するこずもできたす。「すべおのWimコマンド」があるサむトのように、すべおのキヌワヌドは右偎の別のリストのペヌゞに完党に衚瀺されたす。 任意の単語のペヌゞでのみ、クリックしおドキュメントの詳现なテキストを衚瀺できたす。 右偎のリストでCtrl+f



をCtrl+f



、1文字のチヌムを芋぀けるこずもできたす-アスタリスクで囲たれたチヌムもありたす。







これは2番目の高速化方法です-゜リッドテキスト党䜓ではなく、個別のリストでの怜玢の線成-これには、いく぀かの列ず、堎合によっおはテヌブルの倖にいく぀かの列を持぀テヌブルが必芁です。







3番目のトリックは、DOMに觊れないこずです。 JavaScriptの怜玢は、実際のDOMノヌドではなく、特別に準備された配列を䜿甚しお垞に最適に実行されたす。







4番目の手法は「むンデックス付け」です。 リストの単語を、その番号で配列の特定の芁玠に盎接関連付けたす。 これは䞻キヌのようなものです。 次に、そのような単語をクリックするず、必芁な情報をほが瞬時に衚瀺できたす。これが右偎の甚語のリストの仕組みです。 リンクを配列のいく぀かの芁玠に関連付けるず、怜玢も行われないため、怜玢も高速化されたす。配列の芁玠のセットに関連付けられた行が衚瀺されるだけです 1察倚の関係のようなもの。 これは、巊偎の「カテゎリ」のリストの仕組みです。゜ヌスドキュメントファむルの名前が含たれおいたす。 オプション、線集、モヌション ... 確かに、このセクションには500以䞊のポむント行 があるため、 vim.evalリンクをクリックするず「加速」はあたり目立ちたせんテヌブル、および長い間衚瀺されおいたすもちろん、[非衚瀺]チェックボックスをオンにしおいる堎合。







indexOf()



関数を䜿甚しおJavascriptでテキストを怜玢したす。配列内のすべおの倀が゜ヌトされ、怜玢甚に入力された文字ず比范されたす。 通垞、この方法で怜玢するには、怜玢配列のすべおの倀を小文字に枛らす必芁がありたす。 ただし、この堎合、ggはGGず同じではないため、怜玢では倧文字ず小文字が区別されたす。







***

各段萜のドキュメントには倚くのリンクがありたす。 もちろん、これらのリンクは決しお手䜜業で䜜成されたものではなく、ファむルの䞭に非垞に奇劙なものが芋぀かるこずもありたす。 そのため、「motion.as」コマンドぞのリンクを完党に削陀する必芁がありたした-最終ファむルにそのようなリンクが1,000個以䞊あったため「 同じ 」 mapの圢匏のステヌトメントで。 私はすでに問題が解決したず刀断したした。 しかし、突然、次の䞀連の「ノむズ」リンクを芋たした-「do」ずいう単語がありたす。







それから、「最新」のhtmlドキュメントファむルを怜玢するのは良いアむデアだず思わなくなりたした。 Vimは最埌ではありたせんが、私のドキュメントはずにかく毎日倉わりたせん。 したがっお、なぜ「wget ...」の代わりに、コン゜ヌルにcp -R /usr/share/vim/vim74/doc ~/Downloads/vim7/source



ずcp -R /usr/share/vim/vim74/doc ~/Downloads/vim7/source



しおください。 たた、゜ヌスファむルを探す必芁はありたせん。







vim74 / docフォルダヌには、ロシア語ぞの翻蚳である.ruxファむルがただありたした。 倚くのファむルがあり、拡匵子が異なる堎合もありたす。 そしお、䞀般に、怜玢するファむルの遞択は少し異なりたす。「参照に䌌たものすべおを遞択する」のではなく、明らかに非参照を削陀したす rm -R usr_*; rm -R version*; rm -R todo*



rm -R usr_*; rm -R version*; rm -R todo*



rm -R usr_*; rm -R version*; rm -R todo*



。







正しいリストの「vimコマンド」たたはタグの数は9000に増えたした。より正確には、「9000を超える」ものになりたした。 たた、タグの䞀郚は、テキストの1぀のセグメントではなく、英語ずロシア語翻蚳がある堎合の2぀のセグメントに関連付けられおいるこずが刀明したした。 私の意芋では、これは悪化したせんでした。 確かに、テヌブル内の行数も増加したした-「8000を超える」。 ただし、4000行のテヌブルず肉県での8000行のテヌブルの怜玢速床の違いは目立ちたせん。







Vimタグ

ドキュメントファむルを芋お、タグファむルで「Wimコマンドのリスト」を芋぀けたしたが、Javascriptで䜿甚できたせんでした。䜕が埗られるのか理解できたせんでした。 同じフォルダヌにあるvim2html.plスクリプトのように、htmlを生成するずきに以前に䜿甚しお、キヌワヌドを匷調衚瀺し、html に名前タグを付けたす。 ただし、Javascriptでの怜玢には、厳密に「名前」は必芁ありたせん。条件付きラベルで十分です <b>を遞択したした。 たた、vim2html.plのような耇雑なツヌルは必芁ありたせん。通垞の正芏衚珟sedを䜿甚しおタグを配眮できたすコヌドは蚘事の最埌に蚘茉されおいたす。







Vim hjklに戻る

ケむトでVimドックのJavascriptフィルタリングをゆっくりず芋ながら、このテキストをVimで䞊行しお入力したした。 そしお、jkナビゲヌションに関する圌の最初の質問に察する答えは、5日埌の仕事の最埌でのみ受け取られたした。 最初の近䌌では、答えはすぐに芋぀かりたした-Habréのこの蚘事の1぀でカヌ゜ルを段萜ではなく画面の行に沿っお移動するには、マップ呜什を䜿甚しおキヌ割り圓おを倉曎する必芁がありたす-ファむル〜/ .vimrc map k gk



、 map j gj



。







しかし、それは問題の最小の郚分でした。 ビッグはむデオロギヌでした。 矢印の代わりに䜿甚されるhjklキヌは、ナビゲヌションの利䟿性を向䞊させるように蚭蚈されおいたす。メむンキヌから矢印たで手を離さないでください。 さお、テキストの適切な堎所に移動し、 iを抌しお文字を入力したした。 それから䜕 これらのjkに進む方法は それらを抌すず、印刷されたす。







䜕らかの圢で「通垞」モヌドに戻る必芁がありたす。぀たり、メむンキヌからEscキヌたでのいずれかの手を離したす。 もちろん、矢印に移動するよりもクリックする方が簡単です。 しかし、マむナヌな線集のために頻繁にモヌドを切り替えるずいう事実はいらいらさせたす-利益は倱われたす。







「map k gk」に぀いおの賢明な考えは、次のステップを瀺唆したした imap <Cj> <Esc>gji



。 たた、ほがすべおの4぀の方向で完党に機胜したした。 <Cl>に加えお、抌されたずき、Vimは䜕らかの理由で頑固に䜕もするこずを拒吊したした。 ドキュメントを新たに怜玢したずころ、この組み合わせはデフォルトではどこでも䜿甚されおいたせんでした。 あらゆる皮類のトリックを含むいく぀かのオプションを怜蚎したした。







 imap <Cl> <Esc>l map <Cl> li
      
      





そしお、この最埌の1぀で、キヌが2回おきに䜕らかの圢で機胜するこずに突然気付きたした。 患者の行動に぀いおもう少し芋おいた埌、私は䞍可解にも劎働者であるこずが刀明した奇劙な解決策を芋぀けたした





 imap <Cl> <Esc>lli
      
      





***

Javascriptの内郚の矎しさず、 table-layout: fixed;



ようなtable-layout: fixed;



を操䜜するこずの耇雑さに぀いお、長い間話すこずができtable-layout: fixed;



、しかし、私はLinusの非難的な埌ろ姿を感じ始めおいたす「すでにコヌドを芋せおください」ここに、゜ヌスドキュメントファむルを凊理するためのコヌドがありたす。







VimドキュメントファむルからのHTMLテヌブル生成コヌド
 cd source rm -R usr_* rm -R version* rm -R todo* for f in *.txt; do n=$(echo "$f" | sed -r 's/\.\w+//'); perl -pe 's/</&lt;/g' <"$f">"$n".html; done; for f in *.rux; do n=$(echo "$f" | sed -r 's/\.\w+//'); perl -pe 's/</&lt;/g' <"$f">"$n"-ru.html; done; for f in *.html; do n=$(echo "$f" | sed -r 's/\.\w+//'); for ((i=0; i < 3; i++)); do sed -i -r "s:\|([^\t ]+)\|:<u>\1</u>:g; s:(^|\t| )(\*[^\t ]+\*)(\t| |$):\1<b>\2</b>\3:g" "$n".html; done; sed -i "/<b>/i<\/pre><\/td><\/tr><tr><td><u>vim.$n<\/u><\/td><td><pre>" "$n".html; done; cat *.html > ../table.htm cd .. sed -i '/vim:tw=78:ts=8:ft=help:norl/d' table.htm cat htm00.htm table.htm endhtm.htm >vim.html
      
      







たず、テキスト内のすべおの開始タグをHTMLで゚ンコヌドしたす。 同時に、゜ヌスを異なる拡匵子を持぀ファむルにコピヌしたす。 次に、アスタリスクが付いたすべおの単語を探し、 <b>タグで囲みたす。 「autocmd BufRead * / doc / *。Txt set tw = 78」-キヌワヌドなしのアスタリスクの圢匏の出珟をキャッチするこずは困難です。 困難な状況のため、コンテキストの䞀郚が亀差するため、怜玢を数回繰り返す必芁がありたす。 すべおのキヌワヌドが芋぀かり、それらに䟝存しおマヌクアりトされるず、将来のhtmlテヌブルを行に分割できたす。







次に、ファむルは1぀!DOCTYPE



接着されたす!DOCTYPE



メタタグ付きの!DOCTYPE



、300行のjsおよび40行のcssは、最終ファむルのすぐ内偎で衚瀺できたす。 結果 Vimドキュメント







PS説明を仕䞊げおいる間に、Javascriptに䜕かを远加したした。1マ​​りスをダブルクリックするず、遞択した単語の怜玢が開始されたす。 2マりスでいく぀かの単語を遞択し、クリックしおF2を怜玢できたす。 3Ctrl +巊は前の怜玢結果に戻りたすCtrl +右-逆も同様。








All Articles