Ustaw tryb wiersza poleceń <Esc> i Ctrl


11

Wyobraź sobie, że chcesz zacytować poniższe słowo. Jeśli |jest to pozycja kursora, możesz z łatwością zacytować słowo z cw""<Esc>Ptrybu normalnego.

|below

Chcę osiągnąć to samo zachowanie w trybie wiersza poleceń. Moje pytanie brzmi: jak mogę powiedzieć trybowi wiersza poleceń, że chcę wpisać <Esc>. Próbowałem :norm cw""<Esc>Pi kilka innych odmian, ale po prostu dostaję ""<Esc>Pzamiast "below".

Wciąż związany z tym chciałbym wiedzieć, jak mogę tworzyć polecenia Ctrl w trybie wiersza poleceń. Na przykład cw"<C-r>""<Esc>zamiast tego mógłbym zacytować wyżej wymienione słowo . Ale wtedy potrzebowałbym wiersza poleceń, aby pisać <C-r>dla mnie. Jak mogę to zrobić?


1
Podobnie jak <C-x><C-e>w readline do edycji wiersza poleceń $EDITOR, masz <C-f>w Vimie, aby otworzyć okno wiersza poleceń. Zobaczyć :help cmdline-window.
romainl

Odpowiedzi:


11

<C-v>jest tym, czego szukasz. Umożliwia wprowadzanie literalnych znaków (np. Literału Esczamiast ciągu „Esc”) bez konieczności ucieczki.

:norm cw""<C-v><Esc>P

wyświetla się jako:

:norm cw""^[P

i zrobi, co chcesz (tj. zacytuj słowo). Możesz także użyć tego z innymi <C-?>mapowaniami. Na przykład twoje drugie żądanie:

:norm cw"<C-v><C-r>""

wyświetla się jako:

:norm cw"^R""

I spowoduje to tak samo jak powyżej. Nie ma potrzeby dołączania dodatkowych Escna końcu.


10

Jest tak, ponieważ specjalne klawisze, takie jak, <Esc>nie są tłumaczone na normalpolecenia i są traktowane jak naciśnięty <Esc>. Aby temu zaradzić, możesz użyć execpolecenia. Tak jak:

:exec "norm cw\"\"\<Esc>P"

Pamiętaj, że musisz wstawić ukośnik odwrotny przed cudzysłowami <Esc>, a używanie pojedynczych cudzysłowów zamiast podwójnych cudzysłowów nie będzie działać.


Czy to działa również w przypadku poleceń Ctrl? Jak mam je zapisać w poleceniu?
Gonçalo Ribeiro

Tak, powinno działać. Możesz je napisać w następujący sposób:"\<C-{insert key}>"
EvergreenTree

2

Tryb wiersza poleceń jest inny; nie można tam używać tych samych (edycji w trybie normalnym) poleceń edycyjnych. Możesz znaleźć listę poleceń na :help c_CTRL-V.

Teraz jest okno wiersza poleceń ( :help command-line-window), które można wprowadzić q:z <C-F>trybu normalnego i z wiersza poleceń. W tym oknie możesz używać wszystkich normalnych poleceń i mapowań, więc byłaby to opcja 1.

Opcja 2 to specjalne odwzorowania dla trybu wiersza poleceń. Jak powiedziałem, nie można zastosować tego podejścia za pośrednictwem :normalet al. Kluczem do ich zdefiniowania jest :help c_CTRL-\_emapowanie, które „ocenia [s] {wyrażenie} i zastępuje [s] cały wiersz polecenia wynikiem”. Oto prosty przykład, który działa poprawnie tylko na końcu wiersza polecenia:

:cnoremap <F1> <C-\>esubstitute(getcmdline(), '\w\+$', '"&"', '')<CR>

1
Nie sądzę, że OP zamierzał stworzyć mapowanie dla linii poleceń, ale wykonać mapowanie z linii poleceń.
EvergreenTree
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.