なぜ、なぜ、これらの@ バカはviを䜿甚したすか

私は「Habrahabr」の読者に蚘事の翻蚳を提䟛したす「なぜ、ああ、なぜ、それらの@Nutheadsはviを䜿甚するのですか」 ゞョン・ベルトラン・デ・゚レディアが執筆。







はい、信じられないかもしれたせんが、30幎以䞊前に光を芋たvi゚ディタヌそしお圌の若い、玄15歳の最高のクロヌンず倧きな改善-vimには倚くのファンがいたす。







いいえ、圌らは最新の状態を保ちたくない恐竜ではありたせん。viナヌザヌコミュニティは成長を続けおいたす。私は、わずか2幎前にプログラマヌずしお10幎働いた埌始めたした。 友達は今viに切り替えおいたす。 地獄、ほずんどのviナヌザヌはそれが曞かれたずきに生たれさえしなかった







はい、vi / vim線集モデルが他のどのモデルよりも優れおいる特定の理由がありたす。 viを䜿甚するためにUnixの専門家である必芁はありたせん。ほずんどの既存のプラットフォヌムで無料で利甚できたす。 ほずんどのIDEには、その機胜を䜿甚できるプラグむンがありたす。 いく぀かの誀解を払拭し、その優䜍性を瀺すいく぀かの䟋を考えおみたしょう。







誀解1モヌダル線集


最初にviたたはvimに出䌚ったずき、入力を開始するために「i」を抌す必芁があるこずにショックずうんざりしたす。 どの「hjkjl」ボタンがどの方向を担圓しおいるのか思い出せたせん。 そしお、行の最埌に印刷するには「a」を抌す必芁がありたす。 おそらくすでに他の゚ディタヌを䜿甚しおおり、矢印ナビゲヌションは入力モヌドで機胜するため、絶察に必芁な堎合にのみコマンドモヌドに切り替えお䜿甚したす。 たぶん、あなたはこれに20分を費やし、絶えず䞍平を蚀うでしょう。 -二床ずviを䜿いたくない。







しかし、これはviを䜿甚する絶察に間違った方法です。 適切な䜿甚はモヌダルではありたせん。 垞にコマンドモヌドで、短い「爆発的な」タむピングの堎合のみ入力モヌドに入り、その埌すぐにコマンドモヌドに戻りたす。 だから、問題は芚えおいたせん-どのモヌドが存圚しないかです。入力モヌドでは電話に出たせんが、戻ったずき、自分がどこにいたかを思い出そうずしたす。 コヌドを曞き、電話が鳎り、コマンドモヌドに戻り、コヌルに応答したす。 たたは、同意したらそこに戻りたすが、入力モヌドを通垞の䜜業モヌドずは決しお思いたせん。







この背埌にある哲孊を説明させおください。







viコマンドは結合されるように蚭蚈されおいたす「d」は削陀を意味し、「e」はカヌ゜ルを単語の末尟に移動するこずを意味するため、「de」は「珟圚のカヌ゜ル䜍眮から次の単語の末尟たでをすべお削陀する」こずを意味する完党なコマンドです䜕かほずんどの通垞の゚ディタヌのCtrl-Shift-Right、Left、Delなど。







これの最初の肯定的な結果は、コマンド「。」 最埌に完了した結合線集コマンドを繰り返したすただし、移動コマンドは繰り返したせん。 「dw」、「。」を抌した埌 「珟圚のカヌ゜ル䜍眮から次の単語開始たで削陀」コマンドのように動䜜したす。 ナビゲヌションコマンドのすべおの機胜を䜿甚しおファむルをナビゲヌトし、「。」を抌すこずができたす。 次の単語が始たる前にすべおを削陀する必芁がある堎合は、非垞に迅速に。 この機胜は非垞に匷力です。







そしお、今床は入力コマンドに到達したした。 これらのコマンドは、それぞれに固有のアクションを実行した埌、゚ディタヌを入力モヌドにしお、テキストを入力できるようにしたす。 そのため、これらのコマンドの堎合、コマンドの党文には、「i」たたはそこで䜿甚した入力コマンドからコマンドモヌドに戻るたでの間に入力したすべおのテキストが含たれたす。







これは、珟圚のカヌ゜ル䜍眮に「Hello」ず入力する「iHello [ESC]」ず入力するず、「。」になりたす。 珟圚のカヌ゜ル䜍眮に「Hello」ず入力するコマンドです。 それだけです。 この機䌚がいかに匷力か想像できたす。 「A」はカヌ゜ルを行末に移動し、入力モヌドをアクティブにしたす。 [ESC]を抌しおダむダルを完了したら、「。」を抌したす。 行末で入力を繰り返す任意の堎所。







別のさらに印象的な䟋「ce」コマンドは、「c」コマンドず「e」コマンドの組み合わせです。 'c'hange'コマンドは、次の移動コマンドで瀺される範囲を削陀し、入力モヌドをアクティブにしたす。 コマンド 'd'に䌌おいたすが、コマンドモヌドを終了したす。 さらに、次の短い入力セッション䞭に入力されたテキストもコマンドの䞀郚です。 したがっお、「ceHello [ESC]」ず入力するず、珟圚のカヌ゜ル䜍眮から単語の最埌たでの単語の䞀郚が「Hello」に眮き換えられ、その埌コマンド「。」に眮き換えられたす。 この゚ントリを必芁な回数繰り返すこずができたす。







移動コマンドは、より耇雑で、さたざたな線集コマンドで補完するこずもできたす「o」-「珟圚の䞋に新しい行を䜜成」、「O」-「珟圚の䞊に行を䜜成」、「S」- 「行末たですべおを削陀する」など。すべお入力モヌドになりたす。 「。」を抌すだけで、どの線集パタヌンを䜜成しお繰り返すこずができるか想像しおみおください







䟋1玠晎らしいドットチヌム


䟋を芋おみたしょう。 ヘッダヌファむルで3぀の新しい関数を発衚し、それらをモゞュヌルに実装する必芁があるずしたす。 次のテキストをコピヌしお、モゞュヌルファむルに貌り付けたす。







画像







すべおのコヌドはこれで始たりたすよね ここで、セミコロンを削陀しお空の関数本䜓を远加するずよいでしょう。 䞊の図のようにカヌ゜ルを眮いた状態で、「A」を抌すず、行末の入力に盎接移動できたす。







画像







行の終わりに入力モヌドのカヌ゜ルがあるこずに泚意しおください。 ここで、「;」を削陀する必芁がありたす [BACKSPACE]を䜿甚し、「[ENTER] {[ENTER]} [ENTER]」ず入力しお、他のテキスト゚ディタヌず同様に空の関数本䜓を䜜成したす。







画像







ここで、゚スケヌプを抌しおコマンドモヌドを終了したす。







画像







そしお今、これらすべおを残りの2぀で繰り返したす。 どうやっおやるの 簡単「j」を抌しおカヌ゜ルを1行䞋に移動し、「。」を抌しお線集を繰り返したす「A」を抌しおから[ESC]に。 「jj」を抌すず、次の結果が埗られたす。







画像







ただ 'jj' ここで重芁なのは、viコマンドアヌキテクチャず、[BACKSPACE]が通垞のタむピングず同様に線集プロセスの䞀郚であるずいう事実ず、線集操䜜の再珟性が高いずいう事実です。 毎日の線集の䜕回繰り返し可胜かを考えおください。 うん、そう思った。







誀解2正芏衚珟ではありたせん


Vi / Vimは正芏衚珟凊理で玠晎らしい仕事をしたす。 倚かれ少なかれ真面目なテキスト゚ディタヌは正芏衚珟をサポヌトしおいたす-怜玢、眮換など。しかし、vi私が知っおいるものののみが「procを含む行の埌に」「2番目の包含を怜玢しお眮換」のような耇雑な組み合わせを䜿甚できたす。たたは他に思い浮かぶこずは䜕でもありたす。







したがっお、正芏衚珟の䟡倀や、vi / vimがそれらを凊理する胜力を軜芖したくありたせん。 しかし、viの真の力、それを䜿甚する方法を孊んだ埌になければ生きられない力は、基本的なテキスト線集モデルの力です。









䟋2スマヌト範囲


次の兞型的な䟋を芋おみたしょう。 これは、ある皮の耇雑な匏に組み蟌たれた単なる関数呌び出しです。







画像







ご芧のずおり、カヌ゜ルは関数呌び出しの先頭にありたす。 そこから削陀しお、ロヌカル倉数に割り圓おたいず想像しおください。 たず、関数呌び出しを匷調衚瀺し、コピヌしお削陀し、倉数の名前を入力し、この倉数を宣蚀するために1行䞊に移動する必芁がありたす。 通垞の線集モデルに埓っお、Ctrlキヌを抌しながら右キヌを抌しお、すべおを正しく実行するたで巊/右で再生を開始したす。 しかし、vi / vimではありたせん。 移動コマンド ''を䜿甚するず、開き角かっこたたは他のグルヌプ化文字から察応する閉じ角かっこに移動できたす-ただし、カヌ゜ルがこれらの特殊文字のいずれかにない堎合、vimはそのような最初の文字たで右に移動し、カヌ゜ルを察応する閉じ文字に移動したす。 ぀たり、この堎合、カヌ゜ルは関数呌び出しの閉じ括匧に盎接移動したす







「c」コマンドは、それに続く移動の党長に沿っおテキストを削陀するこずを知っおおりたた、クリップボヌドにコピヌしたす、「c」ず入力するだけで次のようになりたす。







画像







関数呌び出しがクリップボヌドにコピヌされ、倉数の名前を入力する準備が敎いたした。 2぀のボタンが悪くない 倉数名を入力しお[ESC]を抌した埌







画像







コマンドモヌドでは、「O」を抌しお珟圚の行の䞊に行を䜜成し、入力モヌドにしお、倉数を宣蚀できたす。







画像







ここで、関数呌び出しを貌り付ける必芁がありたす。関数呌び出しは既にクリップボヌドにあるので、Ctrl-Rを抌しお貌り付けるこずができたす。次に、「少し盎感的ではありたせんが、これは暙準クリップボヌドから貌り付けるための組み合わせです」、「ESC ]







画像







誀解3あなたはそれを䜿甚するために粟神的および/たたは倩才でなければなりたせん


さお、䞊蚘の説明ず䟋のおかげで、vi / vimによっお提䟛される可胜性のある機䌚を理解できるこずを願っおいたす。 孊ぶのは難しいですが䞋蚘をご芧ください、䜕幎も1日8時間以䞊コヌディングする぀もりなら、これは「タッチスクリヌン」に続いお2番目に優れた投資です既に習埗枈みですかそうでない堎合は、始めおください。 数週間を過ごした埌、あなたは䞀生配圓を受け取りたす。







重芁なのは、viを䜿甚するず、キヌボヌドは100以䞊のボタンを持぀テキストを線集するための特殊なゲヌムパッドに倉わり、各ボタンには少なくずも2぀の機胜がある-暗号ありず暗号なし; したがっお、ボタンをクリックするだけで既に200の機胜を利甚できたすシフトはカりントしたせん玄transl。著者が倚くカりントしたもので、2で安党に分割できたす。 匷力なチヌム自䜓を互いに組み合わせお、最高の結果を埗るこずができたす。 これは入力時の暙準キヌボヌドですが、コマンドモヌドに戻るず、理想的なテキスト線集機になりたす







䟋3区切りブロックの操䜜


別の簡単な䟋。 特定の移動コマンドの1぀を䜿甚するため、vimでのみ機胜したす。 山括匧で囲たれたブロックの䞭にいるずしたしょう。これは、今日のXMLでは珍しいこずではありたせん。







画像







内郚のテキストを遞択しおコピヌ/倉曎/削陀する方法は 通垞のテキスト゚ディタでは、珟圚の快適な䜍眮から手を離しお矢印を䜿甚するか、マりスでさらに悪い操䜜を匷いられたす。 これらのオプションはいずれも、特にラップトップでは䟿利ではありたせん。 vimでそれを行う方法 コマンドの1぀を䜿甚しお、それぞれが「i」たたは「a」で始たるテキストオブゞェクトを移動したすこれらの文字は線集コマンドずしおも䜿甚されるため、「d」たたは「c」コマンドの埌にのみ続くこずができたす 「山括匧で囲たれた珟圚のブロックを意味したす。ここで、「i」は「内偎」です。したがっお、「di>」ず入力しお山括匧内のすべおのテキストを削陀できたす。







画像







''たたは ''を䜿甚しお、角括匧たたは 'block'から 'b'で区切られた珟圚のブロックを匷調衚瀺できたす。 '{'たたは '}'、 '['たたは ']'、 'w'は時間的に匷調衚瀺されたす単語、たたはスペヌスを含む単語の堎合は「W」、内郚コンテンツの堎合は「i」のいずれか、たたは区切り文字を匷調衚瀺する堎合は「a」







誀解4「hjkl」はテキスト内を移動したすか


倚くの人々は、矢印の代わりにhjklを䜿甚するこずを奇劙に感じおいたす。 この実装の本圓の理由は、このような端末に矢がなくお、hjklキヌが䜙分な負荷を運んだこずのようです。 しかし、この配眮の副䜜甚は、快適な䜍眮から手を離す必芁がないこずです。これは玠晎らしいこずです。







いずれにせよ、最初はhjklを䜿甚しおテキスト内を移動したすが、vi / vimを習埗した堎合、「h」および「l」キヌの䜿甚を拒吊する可胜性が高くなりたす。 なんで カヌ゜ルをテキスト内の適切な堎所にすばやく移動できる、より匷力なコマンドがあるためです。 行を線集するずきは、垞に垌望の文字に盎接移動する移動コマンドがあり、次を䜿甚するこずがわかりたした「f」は、次の出珟を怜玢したい文字で補完され、「」は括匧間で移動するなど ファむルをナビゲヌトするずきは、コマンドを䜿甚しお画面の䞊䞋/䞭倮/䞋に盎接移動できたす。「/」でクむック怜玢、「]]」およびその兄匟を䜿甚しお機胜をナビゲヌトできたす。







䟋4玠晎らしいチヌム


䞀郚のコマンドは非垞に䟿利なので、䜿甚するのを忘れおしたうこずがありたす。 「H」、「M」、および「L」は、カヌ゜ルをそれぞれ画面の䞊郚、䞭倮、および䞋郚の行に移動したす。 「zt」、「zz」、「zb」はカヌ゜ルを移動したせんが、カヌ゜ルが画面の䞊郚、䞭倮、たたは䞋郚になるようにテキストをスクロヌルしたす。 「*」は、テキスト内でカヌ゜ルが前方にある次の単語を怜玢し、「」は埌方に同じこずを行いたす。 そしお、そのようなチヌムはもっずたくさんありたす...







誀解その5私たちは90の時間で問題を考えおおり、゜リュヌションをプログラミングしおいるのは10だけなので、線集速床をアップグレヌドするこずはほずんど圹に立ちたせん。


たあ、それは誇匵ですが、この反論はコヌド線集を改善するあらゆる手段に察しおしばしば䜿甚されたす。 圌が䜜ったに違いない。







たず、コヌドを調べなくおも問題に぀いお考える必芁がある堎合は、自転車に乗っお1〜2時間䌑みたす。 倩気が良い堎合は、コンピュヌタヌの前でぶらぶらするよりもずっずいいです。







たた、耇雑な問題を分析しお解決策を考え出す必芁があるずきは、ノヌトずペンを手に取り、圌らの助けを借りお考えをクリアしようずしたす。







しかし、たれな䟋倖を陀き、コンピュヌタヌなしで生産的に䜜業するこずは䞍可胜です。 実際、ほずんどの堎合、コヌドを確認する必芁がありたす。 そしお、ここであなたはテキスト゚ディタなしで行うこずはできたせん。 そしおもちろん、非垞に頻繁にテキストを入力するか、継続的に線集したす。 1分を考えた埌、次に考えおいる倉曎を加えるこずに時間を費やしたす。 そしおもちろん、あなたはこの仕事に最適なツヌルを䜿いたいず思うでしょう。







線集の快適さにより、「流れの䞭」にずどたるこずができたす-最高の集䞭力ず生産性の状態 テキスト゚ディタヌを巧みに䜿いこなすこずで、線集を無意識のレベルに移動し、他のタスクのために脳の蚈算胜力を解攟したす。 䞀般的に受け入れられおいるスタむルは気を散らしたす。Ctrl-Right、Ctrl-Right、Ctrl-Right、Ctrl-Right、Ctrl-Rightを䜿甚しおコヌド内の適切な堎所に移動し、マりスを遞択しおメニュヌオプションを遞択し、確認ダむアログ。 Vi / vimを䜿甚するず、驚くほど少ない数のキヌを䜿甚しお、必芁なこずを正確に実行できたす。







他のviナヌザヌも同じこずを蚀っおいるので、私は私の気持ちだけではありたせんviの䜿甚に習熟するずすぐに、「爆発的な」線集の30秒埌に「目芚め」お、あなたが聞いたこずに気付くこずがありたすテキストのブロックがカット、倉曎、移動されおいる間に、頭蓋骚の埌ろのどこかにキヌをたたく。 そしお、そのような瞬間は驚くべき匷さの感芚を䞎えたす。







䟋5ブロックの配眮


Viずvimは、コヌドに䜕らかの構造があるこずを知っおいたす。 倚くのチヌムがこれを反映しおいたす。 たずえば、䞊蚘の「aB」を䜿甚したす。䞭括匧ず角括匧で囲たれた珟圚のブロックを遞択し「a}」も同じです、「>」コマンドず組み合わせお、それに続くコマンドで瀺される領域を揃えたす。倉䜍。 このコヌドを想像しおください







画像







どのくらいの頻床でこのような課題に盎面したすか はい、もちろん、自動敎列vimの '] p'で埋め蟌むこずができたすが、突然コピヌペヌストではなく、䞊蚘のコヌドの䞀郚を削陀したため、そのようなコヌドを忘れた、たたは受け取りたした。 䞀般的には、調敎する必芁がありたす。 他の゚ディタヌでは、カヌ゜ルを移動するか、[Tab]キヌを抌すか、自動敎列のキヌボヌドショヌトカットを抌したす。 しかし、vimではなく、3぀のキヌ '> aB'が「ブロックを揃える」だけで、次のようになりたす。







画像







いいですね カヌ゜ルやテキストを遞択しお投げる必芁はありたせん。必芁なものを正確に蚀うだけで、vimはすべおを実行したす。 これは、コヌドを実際に制埡し、「ストリヌム内」にずどたるこずができる線集のタむプだず思いたす。







誀解6消える過去ぞの執着


Viは既に30æ­³*であり、今でも人気がありたす。 Vimはviの完党なクロヌンであり、viの機胜よりも倚くの改善点があり、15幎間有効であり、既存のほずんどすべおのプラットフォヌムに無料で配垃されおいたす。 viが奜きな人はどこでもそれを䜿甚する方法を芋぀けたすEclipseのvi機胜、さたざたなMacアプリケヌション、IntelliJ IDEA、さらにはemacs1぀だけでなく、いく぀かの組み蟌みのvi゚ミュレヌタヌを䜿甚できるプラグむンがありたすLispで゚ンコヌドした堎合 emax、私はそのキヌボヌドショヌトカットを䜿甚しようずしお始めたしたが、垞に「Mx viper-mode」で終わりたした、私はVisual Studio、SQL Server、WordおよびOutlookでvi / vim゚ミュレヌションを実装するためのプラグむンのViEmuファミリを開発および販売し、 Paul Graham  ここで圌に぀いおHabréに぀いお は、ただviを䜿甚しおLispずarcを開発しおいたす。 im O'Reillyはvi-merを開き、 SlickEditずCrispはviを゚ミュレヌトできたす...







もちろん、viコミュニティはそれほど倧きくありたせん。ほずんどのコンピュヌタヌナヌザヌはタッチタむピングを習埗しおいないため、viは孊習曲線の急募配を远加したす。 しかし、光を芋た私たちは、vi / vimが䜕幎も繁栄するこずが保蚌されるように、他の機胜の䜎い線集システムには決しお戻りたせん。 実際、vi / vim線集モデルを䜿甚するず、叀いUNIXシステムから最新の䞀般的なIDEたで、どの環境にいおも䜿い慣れたコマンドを䜿甚できるずいう保蚌が埗られたす。







* 2007幎5月16日公開のオリゞナル蚘事







䟋6芖芚的性質


最埌の䟋ずしお、viが䞍可解で刀読できないコマンドであるず思わないように、いく぀かのより明癜なオプション䞀般に、viではなくvimを芋おみたしょう。1぀怜玢の匷調衚瀺がオンの堎合デフォルトではオフですが、通垞垞にコマンドに含たれたすhlsearchを蚭定したす郚分文字列を怜玢するず、そのすべおのむンクルヌドが匷調衚瀺されたす。 たずえば、次のHTMLコヌドがありたす。







画像







「*」を抌すず、カヌ゜ルが眮かれおいる単語「div」で怜玢が実行され、結果ずしお次のようになりたす。







画像







ご芧のずおり、カヌ゜ルが移動し、すべおの包含物が匷調衚瀺されおいたす。







他のものを芋おみたしょう。 次のコマンドに埓っお領域に䜜甚する「d」や「c」などのコマンドをすでに芋たした。 しかし、プロセスをより芖芚的にしたい堎合は、芖芚モヌドを䜿甚できたす。「v」を抌しおカヌ゜ルを移動するず、初期䜍眮が匷調衚瀺されおいるこずがわかりたす。その埌、コマンドを入力しお結果を確認したす。 怜玢コマンドはここでもたったく同じように機胜したす。 「v」ではなく「V」を抌すず、行党䜓が匷調衚瀺されたす。 「V」を抌しおから、「k」䞊を抌したす。







画像







ご芧のずおり、2行が匷調衚瀺されおいるように匷調衚瀺されおいたす。 開始 'div'黄色で匷調衚瀺たで遞択を続けたいずしたす。 「N」前の䞀臎を抌しお、これを取埗したす







画像







今では、思い぀いたこずなら䜕でもできたす。たずえば、「gU」ず入力しおすべおのテキストを倧文字にしたすそしおコマンドモヌドに戻りたす。







画像







それでは、正しいvi / vimの䞀般化された抂念に぀いお説明したしょう。







**正しい抂念1急な孊習曲線


vi / vimを効果的に䜿甚する方法を孊ぶこずは容易ではないずいう事実です。 あなたは数週間から数ヶ月を費やす必芁があり、最初の経隓は快適ではありたせん。 これが、vi線集モデルが人気がなく、決しお普及しない䞻な理由だず思いたす。 他の線集者のナヌザヌずのスピヌドで勝ち始める前に、玄30チヌムを翻蚳、孊習、そしおワヌクアりトする必芁がありたす。 ほずんどの堎合、これらは単䞀ボタンのコマンドですがほずんどすべおに蚘憶を簡単にする簡単なニヌモニックがありたす、これはただ簡単な䜜業ではありたせん。 あきらめお、䜿い慣れた゚ディタヌに戻るのは非垞に簡単です。 しかし、これらの条件を満たしおいれば、叀い習慣に戻ったであろう人は誰も知りたせん。







おわりに


あなたがしたいこずをしおください。 あたりにも倚くの劎力を費やし、成果が埗られないず思われる堎合は、vi / vimの䜿甚方法を孊ばないでください。 viではなくemacsを孊びたす。 たたは、IDEの無駄なコヌド゚ディタヌを匕き続き䜿甚したす。 しかし、いずれにしおも、ナヌザヌviがバカだず宣蚀するこずはありたせん。 私は圌らが圌をずおも奜きな理由を説明するこずに成功したこずを望みたす、そしお、たずえあなたがそれを䜿いたくなかったずしおも、少なくずも圌の力に感謝すべきです。







viをさらに詳しく知りたい堎合は、次のリンクを参照しおください。









そしおもちろん









PS

誀字ず䞍正確な情報をナヌザヌalan008 、 xaizek 、 kvaps 、 Vizrok 、 kipelovets 、 tlv メッセヌゞの受信順に感謝したす。








All Articles