vimコマンドラインでperl正規表現を使用できますか?


27

vimコマンドラインでperl正規表現を使用します。たとえば、現在の行の単語を大文字にするには、次のように入力できます。

:s/(\w+)/\u$1/g

From :help perl-patterns ... Vimの正規表現は、何ができるかという点でPerlに最もよく似ています。それらの間の違いは、ほとんど表記だけです。うーん...それは、中国語がギリシャ語に似ていると言っているようなものです。違いは主に単なる表記です。正規表現は何もありませんが、表記!ある表記法が別の表記法よりも馴染みのない場合、違いは迷惑です。そもそも人々がperlについて尋ねるのはそのためです!
dreftymac

回答:


19

!を使用して、vimの外部コマンドで任意の行または行の範囲をフィルターできます。たとえば、次のことができます。

:.!perl -pe "s/(\w+)/\u\1/g"

そのperlコマンドを介して現在の行をフィルタリングします。(ここで:コマンドラインモードに入ります。.これは現在の行を意味します。行の範囲や%ファイル全体などを指定することもできます。)

vimの組み込みの置換パターンを使用する場合、最も近い方法は、vimの「非常に魔法の」オプション\ vを使用することです。

:s/\v(\w+)/\u\1/g

:help patternおよび:help substituteを参照してください。「非常に魔法」はperlのパターンとまったく同じだとは思わないが、非常に近い。とにかく、上記のように、より快適であれば、常にperl自体を使用できます。


1
また、非常に魔法を使うと、(特別に扱われるが、{「0」-「9」、「a」-「z」、「A」-「Z」を除くすべてのASCII文字「_」には特別な意味があります。」ありがとう!
アイラート

10

いいえ、Perlの正規表現をそのように使用することはできません。Perlの正規表現コンポーネントに相当するVimの学習のヘルプについては、

:help perl-patterns

ただし、frabjousで説明されているように、Perlを外部フィルターとして使用できます。Vimが+perl機能付きでコンパイルされている場合、Perlインターフェイスを使用してVim内でPerlコマンドを実行することもできます。見る

:help if_perl.txt

2
+1は、:help perl-patterns私が以前のvimについて嫌っていることを一つのことを解決した
マーク・K・コーワンを

8

以下も使用できます。

/\v"your regex"

の代わりに:

/"your regex"

これは私が探していた答えです!
alextercete

また、.vimrcをに追加nnoremap / /\vvnoremap / /\vて、入力したときに正しく機能するようにすることもできます/
mattmc3


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.