Ich muss oft ein paar Sachen in eine neue Zeile in vim einfügen. Was ich normalerweise mache ist:
o<Esc>p
Was eine neue Zeile einfügt und mich in den Einfügemodus versetzt, dann den Einfügemodus beendet und schließlich einfügt.
Drei Tastenanschläge. Nicht sehr effizient. Irgendwelche besseren Ideen?
Antworten:
Kurz darauf
:help p
heißt es:Leider ist es nicht kürzer als Ihre aktuelle Lösung, es sei denn, Sie haben es mit einer Tastaturzuordnung kombiniert, wie in einer anderen Antwort vorgeschlagen. Sie können es beispielsweise einem beliebigen Schlüssel (gerade
p
) zuordnen :quelle
:pu[t]
wird der Text in eine neue Zeile nach der aktuellen Zeile eingefügt,:pu[t]!
wird der Text in eine neue Zeile vor der aktuellen Zeile eingefügt. Ich werde meine Antwort entsprechend bearbeiten. (Hurra für:help p
.):nmap p :pu<CR>
zuordnen , einschließlich p selbst: Legen Sie ihn in Ihre .vimrc-Datei und los geht's :)Optionen:
1) Verwenden Sie
yy
diese Option, um die gesamte Zeile (einschließlich des Zeilenendezeichens) zu ziehen.p
fügt dann die Zeile in eine neue Zeile nach der aktuellen ein undP
( Shift- P) wird über der aktuellen Zeile eingefügt.2) Machen Sie eine Zuordnung: dann sind es nur ein oder zwei Schlüssel:
3) Die Funktionsversion des Mappings (eigentlich unnötig, aber nur der Vollständigkeit halber):
quelle
Sie können einen Puffer im Einfügemodus einfügen,
<C-R>
indem Sie den Namen des einzufügenden Puffers gefolgt vom Namen des Puffers verwenden. Der Standardpuffer ist"
, also würden Sie es tunIch fand, dass ich
<C-R>"
sehr oft benutze und band das<C-F>
in meinem vimrc:quelle
Dies verwendet immer noch drei Tastenanschläge, aber ich finde es einfacher als Esc:
o<Alt-p>
Da Sie sich nach dem Drücken von o im Einfügemodus befinden, können Sie mit dem Alt-Modifikator einen Befehl verwenden, als ob Sie es nicht wären.
quelle
Verwenden dieses Plugins: https://github.com/tpope/vim-unimpaired
]p
Pasten in der Zeile darunter[p
Pasten auf der Linie obenVorteile:
quelle
tpope/vim-unimpaired
Könnte erwähnenswert sein, dass dies erforderlich ist 😉.Persönlich habe ich Enter (CR) wie folgt zugeordnet :
... basierend auf diesem Vim Wikia Artikel.
Auf diese Weise kann ich Zeilenumbrüche direkt aus dem normalen Modus erstellen und dies mit dem Wunsch kombinieren, sie in eine neue Zeile einzufügen.
Sie könnten auch überspringen k in der obigen nmap, je nachdem , was Funktionen , die Sie von bevorzugten eingeben , so wäre es nur sein
<CR>p
.Ich habe auch jj auf Esc abgebildet , was auch in diesem Fall hilfreich wäre. Esc ist viel zu weit von der Startreihe entfernt, als dass es für vim von Bedeutung wäre.
Nicht kürzer als die anderen Lösungen, aber ich denke, es fühlt sich weniger klobig an als einige von ihnen, und es hat auch andere Verwendungszwecke.
quelle
Wenn Sie eine ganze Zeile kopieren und dann eine ganze Zeile
Y
einfügen, ziehen Sie zunächst die Zeile oder Zeilen, einschließlich Zeilenumbruch, undp
fügen Sie sie ein. Sie können auch verwendet werdenV
, der visuelle ist Linie Modus, im Gegensatz zu Normalv
zur visuellen Modus.quelle
Ich habe Mapping
inoremap jj <ESC>
. So ist es einfach, eine neue Zeile mitojj
undOjj
und dann einzufügenp
.ojjp
Fügen Sie also eine neue Zeile ein. es hat dann noch einen Schlag,o<esc>p
aber esojjp
fällt mir leicht.quelle
Ich habe eine elegante Lösung dafür gefunden. Wenn Sie das Yank-Register in die Zwischenablage Ihres Betriebssystems einfügen (was sowieso großartig ist), mit
als du tun kannst
o<Ctl-v>
.Dies ist nicht nur weniger Striche, sondern verbessert auch beide
o<Esc>p
und:pu
weil die Einrückung erhalten bleibt: Beide anderen Optionen beginnen Sie bei Zeichen Null in der neuen Zeile.Vorsichtsmaßnahme ist, dass dies vom Betriebssystem abhängig sein kann oder nicht. Ich weiß nur, dass es auf der neuesten Version von OS X funktioniert, aber die Zwischenablage ist nur eine von vielen Möglichkeiten, um in die Zwischenablage des Betriebssystems zu gelangen.
quelle
Wenn Sie auch im Einfügemodus enden möchten, können Sie im Einfügemodus mit einfügen
CTRL-R "
. https://stackoverflow.com/a/2861909/461834Immer noch drei Tastenanschläge, aber kein Entkommen, und Sie speichern einen Tastenanschlag, wenn Sie trotzdem mit Einfügen enden möchten.
quelle
Ich verwende die folgende Zuordnung in meiner Neovim-Konfiguration:
Eine kleine Erklärung:
m`
: Setzen Sie eine Markierung an der aktuellen Cursorposition.o<Esc>p
: Erstellen Sie eine neue Zeile darunter und fügen Sie den Text in diese Zeile einO<Esc>P
: Erstellen Sie eine neue Zeile darüber und fügen Sie den Text in diese Zeile ein``
: Setzen Sie den Cursor an die ursprüngliche PositionSehen Sie
:h mark
für weitere Informationen über Marken in Vim.quelle
Wenn Sie im Einfügemodus bleiben möchten, können Sie dies tun
o ctrl+o p
o
- Modus einfügen und zur neuen Zeile wechselnctrl+o
- Führen Sie einen einzelnen Befehl wie im normalen Modus ausp
- EinfügenEs sind drei Tastenanschläge, aber Sie bleiben im Einfügemodus und sind auch
o ctrl+o
ziemlich schnell, so dass ich es persönlich als 2,5 Tastenanschläge behandle.quelle
Diese Lösung scheint nur dann zuzutreffen, wenn der kopierte Textblock in einer neuen Zeile beginnt (im Gegensatz zum Abrufen eines Textausschnitts irgendwo in einer Zeile). Sie können die Kopie jedoch immer mit dem letzten Zeichen beginnen, das Sie erfassen möchten, und dann navigieren bis zum letzten Zeichen am Zeilenende vor dem Start des gewünschten Kopierblocks. Wenn Sie es dann einfügen möchten, platzieren Sie den Cursor am Ende der Zeile, unter der Ihr Text eingefügt werden soll, und drücken Sie p. Wenn ich die Erklärung nicht vermasselt habe, sollte dies den gewünschten Effekt liefern.
quelle