So führen Sie in Vim eine Suche ohne Berücksichtigung der Groß- und Kleinschreibung durch


1650

Ich möchte nach einem Wort in Großbuchstaben suchen, zum Beispiel COPYRIGHT in einer Datei. Ich habe versucht, eine Suche durchzuführen wie:

/copyright/i    # Doesn't work

aber es funktioniert nicht. Ich weiß, dass in Perl, wenn ich die iFlagge in einen regulären Ausdruck gebe, der reguläre Ausdruck in einen regulären Ausdruck ohne Berücksichtigung der Groß- und Kleinschreibung umgewandelt wird. Es scheint, dass Vim seine eigene Methode hat, um einen Regex ohne Berücksichtigung der Groß- und Kleinschreibung anzuzeigen.

Antworten:


2107

Sie können die \cEscape-Sequenz an einer beliebigen Stelle im Muster verwenden. Zum Beispiel:

/\ccopyrightoder /copyright\coder sogar/copyri\cght

Verwenden Sie stattdessen (Groß- und Kleinschreibung\C C) , um die Umkehrung durchzuführen (Groß- und Kleinschreibung beachten) .


516
Auch \ckann erscheinen überall in dem Muster, also , wenn Sie ein Muster eingeben und dann entscheiden Sie Groß- und Kleinschreibung suchen wollten, nur hinzufügen , \cam Ende.
Alok Singhal

269
Ich füge set ignorecasein meinem vimrc gerne eine Suche hinzu, bei der die Groß- und Kleinschreibung nicht berücksichtigt wird, und ich kann \Ceine Suche verwenden , bei der die Groß- und Kleinschreibung beachtet wird, ähnlich wie bei @AlokSinghal.
Nick McCurdy

164
Es gibt auch eine, set smartcasedie automatisch zu einer Suche mit Groß- und Kleinschreibung wechselt, wenn Sie Großbuchstaben verwenden.
Zaz

83
Ich möchte nur zu Zaz 'Kommentar hinzufügen. set smartcasegilt nur, wenn set ignorecasebereits aktiv ist. Ich war eine Weile ratlos darüber. Siehe Vim-Tipps .
Tan Wang

12
@coderMe, es ist die Großschreibung im \cVergleich zu\C
Aaron McDaid

680

Neben den Vorschlägen für \cund ignorecasefinde ich das smartcasesehr nützlich. Wenn Sie nach etwas suchen, das Großbuchstaben enthält, wird zwischen Groß- und Kleinschreibung unterschieden. Wenn Sie nach etwas suchen, das nur in Kleinbuchstaben geschrieben ist, wird die Suche ohne Berücksichtigung der Groß- und Kleinschreibung durchgeführt. Sie können dies verwenden \cund \Cüberschreiben:

:set ignorecase
:set smartcase
/copyright      " Case insensitive
/Copyright      " Case sensitive
/copyright\C    " Case sensitive
/Copyright\c    " Case insensitive

Sehen:

:help /\c
:help /\C
:help 'smartcase'

83
Das Problem dabei ignorecaseist, dass es sowohl Substitutionen als auch Suchen betrifft. Ich finde, dass es sinnvoll ist, (intelligente) Suchanfragen ohne Berücksichtigung der Groß- und Kleinschreibung, aber standardmäßig Ersetzungen ohne Berücksichtigung der Groß- und Kleinschreibung durchzuführen. Aber es gibt keine Möglichkeit, das zu tun, die ich kenne.
Huyz

150
Erwähnenswert ist, dass Sie smartcasezum Arbeiten auch benötigen set ignorecase. Toller Tipp, danke!
Skilldrick

12
Ich glaube, Sie könnten einfach ein \ C in Ihrem Suchausdruck für Substitutionen verwenden, wie folgt : :%s/lowercasesearch\C/replaceString/g. Dadurch wird nicht die gewünschte Standardfunktionalität erstellt, aber Sie können die Groß- und Kleinschreibung für Ersetzungen erzwingen, während Sie bei der Suche weiterhin von Smartcase profitieren.
Anthony DiSanti

23
Sie können das IFlag auch für eine Ersetzung setzen, um zu erzwingen, dass das Muster zwischen Groß- und Kleinschreibung unterscheidet. Wie :%s/lowercasesearch/replaceString/gI.
Rory O'Kane

1
Anmerkung von der After "*" and "#" you can make 'smartcase' used by doing a "/" command, recalling the search pattern from history and hitting <Enter>.
Hilfeseite

291

Sie können die icOption in Vim vor der Suche festlegen :

:set ic

Um zu Suchanfragen zurückzukehren, bei denen zwischen Groß- und Kleinschreibung unterschieden wird, verwenden Sie:

:set noic

ic ist eine Abkürzung für ignorecase


Auch Ihre einzige Option, wenn Sie das Pech haben, weiterhin Vi anstelle von Vim zu verwenden. \cfunktioniert nicht in vi.
Bluppfisk

61

Sie können den Befehl ausgeben

:set ignorecase

und danach wird bei Ihren Suchanfragen die Groß- und Kleinschreibung nicht mehr berücksichtigt.


50

Um zwischen Groß- und Kleinschreibung zu wechseln, verwende ich diese Zuordnung in meiner .vimrc

nmap <F9> :set ignorecase! ignorecase?


15
Ja, ignorecase?zeigt aber den aktuellen Status der Flagge an. (in der Kommandozeile)
Boris Brodski

1
Vielen Dank! Für mich ist dies die nützlichste Antwort auf der Seite: eine Möglichkeit, schnell zwischen den beiden Modi umzuschalten, je nachdem, wonach Sie genau in diesem Moment suchen.
Ben Hillier

30

Sie können in Ihren vimrcBefehlen Folgendes verwenden:

  • set ignorecase - Bei all Ihren Suchanfragen wird die Groß- und Kleinschreibung nicht berücksichtigt
  • set smartcase - Bei Ihrer Suche wird zwischen Groß- und Kleinschreibung unterschieden, wenn sie einen Großbuchstaben enthält

Sie müssen festlegen, ignorecaseob Sie das verwenden möchten, was smartcasebereitgestellt wird.

Ich habe kürzlich einen Artikel über Vim-Suchbefehle geschrieben (sowohl integrierte Befehle als auch die besten Plugins für eine effiziente Suche).


1
Es scheint, dass set smartcasekeine Suche ohne Berücksichtigung der Groß- und Kleinschreibung durchgeführt wird, wenn ich keine Großbuchstaben verwende ... ist das normal?
Caneta

1
Ok, lesen Sie einfach weiter unten, dass Sie sowohl ignorecase als auch smartcase einstellen müssen, damit es funktioniert. Das tut mir leid!
Caneta

24

Wie andere vorgeschlagen haben:

:set ic

Aber das Coole ist, dass Sie solche Modi umschalten können mit:

:set ic!

18

Fügen Sie diesen Befehl in Ihre vimrc-Datei ein

set ic 

Führen Sie immer eine Suche ohne Berücksichtigung der Groß- und Kleinschreibung durch


4
Ich weiß nicht warum, aber mein vim ist standardmäßig auf Groß- und Kleinschreibung eingestellt, um dem entgegenzuwirken. verwenden set noic.
user1510539

18

Der gute alte vim[grep]Befehl ..

:vimgrep /example\c/ &
  • \c für Groß- und Kleinschreibung nicht berücksichtigen
  • \C für Groß- und Kleinschreibung
  • % ist im aktuellen Puffer zu suchen

Geben Sie hier die Bildbeschreibung ein


Cannot open file "&"
Vitaly Zdanevich

Ich denke er meinten sie %statt %.
Oarfish

15

Ich bevorzuge die Verwendung \cam Ende der Suchzeichenfolge:

/copyright\c

10

Wie @huyz erwähnt, verwendet das gewünschte Verhalten manchmal Suchanfragen ohne Berücksichtigung der Groß- und Kleinschreibung, aber Substitutionen ohne Berücksichtigung der Groß- und Kleinschreibung. Meine Lösung dafür:

nnoremap / /\c
nnoremap ? ?\c

Damit immer, wenn Sie drücken, /oder ?es wird \cfür die Suche ohne Berücksichtigung der Groß- und Kleinschreibung hinzugefügt .


1
Kein schlechter Vorschlag, aber hindert er Sie daran, die smartcaseOption zu verwenden?
Trebor Rude

Sieht so aus, als würde es seit \ c überschreibensmartcase
Matthew Woo

4

Vim haben 2 Modi

1.edit-Modus

  1. normaler Modus (Esc)

Die Suche funktioniert im normalen Modus

/ \ c für Groß- und Kleinschreibung beachten

/ \ c suchen


Was ist mit dem visuellen Modus?
user202729

3

Sie können dies ignorecasestandardmäßig festlegen und in der Shell ausführen

echo "set ic" >> ~/.vimrc
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.