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.

Haiyuan Zhang
quelle

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) .

Chinmay Kanchi
quelle
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'
DrAl
quelle
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

Nathan Fellman
quelle
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.

Paolo Tedesco
quelle
50

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

nmap <F9> :set ignorecase! ignorecase?

vbd
quelle
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).

Matthieu
quelle
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!
Thomas
quelle
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

WALID BELRHALMIA
quelle
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

Mick
quelle
Cannot open file "&"
Vitaly Zdanevich
Ich denke er meinten sie %statt %.
Oarfish
15

Ich bevorzuge die Verwendung \cam Ende der Suchzeichenfolge:

/copyright\c
Nick Tsai
quelle
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 .

pbogut
quelle
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

Gowthaman D.
quelle
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
Steely Wing
quelle