6

zsh で現在の行を検索/ナビゲートするにはどうすればよいですか? たとえば、カーソルが行末にある場合..

// [] indicates cursor position
user@hostname: vim /etx/apache2/sites-enabled/defaul[t]

vi 通常モードでは、後方検索 ( ?) を使用し、次のように入力etxしてカーソルを移動させたいと思います。

// [] indicates cursor position
user@hostname: vim /[e]tx/apache2/sites-enabled/default

ただし、/?はインライン検索ではなく履歴検索にマップされます。入力するだけでそこにたどり着くことができることはわかってい9bますが、ジャンプする単語の数を数えるよりも、検索して一致する場所に移動する方が簡単だと思います.

これが明確であるかどうかはわかりません。明確にする必要がある場合はお知らせください。

4

5 に答える 5

2

~/.inputrc ファイルがこれらのキーを奇妙なものにマッピングしたのではないでしょうか? または、検索履歴の仕組みを完全に理解していません。

新たに始めましょう: これらのキーを bindkey で再マッピングします:

bindkey -M vicmd "?" history-incremental-search-backward
bindkey -M vicmd "/" history-incremental-search-forward

ここで、'esc' (vi ノーマル モードの場合) と '?' を押すと、bck-i-search コマンドが表示されます。

%user@hostname: vim /etx/apache2/sites-enabled/defaul[t]
bck-i-search:

この時点で、「etx」など、検索したいものを入力します。そして、カーソルはこの行のその位置に移動します。注: この現在の行でそのパターンが見つからない場合、履歴の検索が続行されます。この動作は機能と見なされます。

繰り返し検索できないことに気付くかもしれません (vim で 'N' を押すなど)。この場合、いくつかの isearch バインディングを追加します。

bindkey -M isearch '^N' history-incremental-search-backward
bindkey -M isearch '^R' history-incremental-search-forward

ここで、control-N を押すと検索が繰り返され、control-S を押すと繰り返される検索の方向が逆になります (注: このキーバインドのデフォルトの順序は順方向から逆方向に逆になっています。 )。

つまり、現在の行を履歴の「先頭」として扱います。vicmd '/' または '?' の使用 その履歴全体を検索します。「?」は上から下へ検索し、'/' は履歴内で現在カーソルが置かれている場所から '上' に向かって検索します。これについて考える別の方法は、履歴を 1 つの大きなファイルとして想像することです。現在の行はそのファイルの一番下にあります。それが理解するのに役立つ場合は、「?」と感じるかもしれません。'/' より適切です。

于 2016-04-29T21:17:46.467 に答える
1

このスクリプトは、この機能を zsh に追加します: https://github.com/soheilpro/zsh-vi-search

于 2016-04-29T05:12:30.667 に答える
0

シェルのコマンド モードで v を入力すると、実際の ViM エディター自体が表示されます。保存して終了すると、自動的に実行されます。

于 2015-12-25T14:27:41.083 に答える