Jak automatycznie tworzyć pasujące nawiasy klamrowe w vimie?
Ten problem nie jest trywialny, jak się przekonacie. Odpowiedź jest prosta: użycie wtyczki, jak AutoClose lub smartinput . Wystarczy naiwnie odwzorować (klucze [... pokażą ci edgecases w kilku liniach), dlatego te wtyczki są tworzone i dlaczego są zwykle dość złożone (jeśli są jakieś dobre).
Więc użyłem UltiSnips, aby wstawić klamrę zamykającą
Możesz spróbować zamiast tego (co różni się od mojej oryginalnej sugestii):
inoremap ( ()<CR>=UltiSnips_Anon('$1)$0', ')')<CR>
Gdzie UltiSnips podzieli linię (
zamiast brać udział main
w meczu. Problem z używaniem wtyczki do tego fragmentu polega na tym, że (zwykle) nie obsługują one zagnieżdżania, więc zapomną o pozycjach skoku po włożeniu następnego (zagnieżdżonego) fragmentu.
Aby wyskoczyć z pary nawiasów, Ctrl-jużywana jest kombinacja .
Możesz zmienić mapowanie Ctrl-jdla UltiSnips lub wtyczki powodującej konflikt. Jeśli mapowania nie ma na liście w dokumentacji, możesz użyć :map/imap/nmap <key>
do wyświetlenia mapowania. Jeśli chcesz Ctrl-jwybrać, wybrać i wykonać pracę obu wtyczek, poprosisz o:
- coś o wiele bardziej zaawansowanego, niż podejrzewam
- coś, co podejrzewam, że tak naprawdę nie chcesz
Rozważ tę pętlę bash:
while (( ${arr1[i]} < ${arr2[i<CURSOR>]} )); do
[next_snippet_position_marker]
done
W takim przypadku musisz nacisnąć Ctrl-j5 razy, aby dostać się do ciała pętli. Użycie zamykających nawiasów w celu wyskoczenia z odpowiedniej pary daje o wiele większą kontrolę nad tym, gdzie faktycznie chcesz przesunąć kursor. Możesz zaimplementować stos, aby śledzić wstawione pary i używać ich Ctrl-jdo pop i przesuwania, ale wtedy wystąpią problemy, jeśli zaczniesz ręcznie usuwać nawiasy klamrowe bez usuwania ich ze stosu. Zaczniesz więc rozwiązywać problemy, które wtyczki klamrowe próbują rozwiązać. To jest trudne koło do wymyślenia na nowo.
Rozwijając to, możesz uzyskać to, o co początkowo prosiłeś, używając Ctrl-jwyskakując z nawiasów klamrowych i fragmentów. Jeśli użyjesz jakiejś wartości fikcyjnej do reprezentowania pozycji urywków i wepchniesz je na stos oprócz zamykających nawiasów klamrowych, z dynamicznym odwzorowaniem Ctrl-jodpowiadającym przekazywaniu urywków lub nawiasów klamrowych. Ale wtedy musisz wdrożyć dość zaawansowaną heurystykę, aby dowiedzieć się, co magia powinna się wydarzyć, ponieważ zasadniczo bierzesz na siebie dwa problemy, które są obecnie rozwiązywane przez twórców wtyczek wstawiania fragmentów i osobno dopasowywania wtyczek i ponownie rozwiązując te problemy, oprócz ich rozwiązań, aby uzyskać wygodę i, no cóż, magię.
Wszystko sprowadza się do kontroli vs. wygody. Myślę, że kontrola w tym przypadku będzie ci lepiej służyć, co oznacza, że powinieneś oddzielić te problemy od powiązanych z nimi wtyczek i mapowań kluczy. Jeśli nadal chcesz wygody, jest to wykonalne, ale trudne.
)
, zmiana mapowaniac-j
na to może działać.