Czasami muszę pisać greckie słowa, ale kiedy używam greckiej klawiatury, uderzenie, powiedzmy, <C-p>
będzie rozumiane jako, <C-π>
a nie jako polecenie, które zamierzam. Można to naprawić za pomocą :map <C-p> <C-π>
. Czy mogę to zrobić dla wszystkich liter bez sporządzania listy wszystkich?
PS. Sporządzenie listy wszystkich nie daje idealnego rezultatu. Np. q
Jest ;
na Gr. klawiatura, ale nie chcemy mapować; do q. Z jakiegoś powodu ΖΖ (zeta zeta) nie działa po :map Ζ Z
. A polecenie, które zdefiniowałem, \lw
nie działa jako \λς
.
key-bindings
keyboard-layout
Toothrot
źródło
źródło
langmap
opcja (zobacz dokument zawierający przykład greckiego układu). Ta opcja została stworzona, aby pomóc w radzeniu sobie z klawiaturami niełacińskimi, takimi jak grecki lub cyryliczny. Pozwala zdefiniować pary symboli, które będą interpretowane normalnie w trybie wstawiania, ale zostaną zastąpione w innych trybach, być może to ci pomoże.:echo has('langmap')
jeśli1
go masz, jeśli go nie0
masz.brew install vim --override-system-vi
i:echo has &c
teraz zwraca 1. ZZ działa. Problem z\lv
& c pozostaje.:echo has &c
części, nie widzę związku z niąlangmap
również po skompilowaniu vimalangmap
, musisz określić odwzorowania:set langmap=ΑA,ΒB,ΨC [...]
w swoim vimrc.Odpowiedzi:
Poleciłbym
keymap
, który może rozwiązać twój problem. Umieść je w swoim vimrcaby domyślnie wyłączyć język grecki. Możesz przełączać tę opcję na (grecki) i wyłączony (angielski) za pomocą
<ctrl>+^
(możesz także użyć<ctrl>+6
, jest mapowany na klucz, a nie na symbol) w trybie wstawiania i trybie zastępowania (nie działa w Tryb normalny). Aby automatycznie wyłączyć przy wychodzeniu z trybu wstawiania, możesz użyćWięcej na ten temat
:h iminsert
:h keymap
:h imsearch
:h i_CTRL-^
EDYTUJ do drugiego komentarza:
Możesz spróbować włączyć automatycznie język grecki, jeśli wejdziesz w tryb wstawiania (i zastąp tryb), i automatycznie wyłączysz, jeśli wyjdziesz (wtedy nie potrzebujesz wspomnianego wcześniej mapowania).
źródło
:map >a
, a jeśli jest , usuń mapowanie przez:unmap >a
. Jako użytkownik nie będący Grekiem i nie będący użytkownikiem MacO jestem już na dobrej drodze. Przepraszam i powodzenia!Jak powiedziałem w komentarzach, odwzorowania w nie są przeznaczone do robienia tego, co chcesz. Interesującą opcją dla tego przypadku użycia jest
langmap
.Ta opcja pozwala zachować zachowanie lub klawiaturę w trybie wstawiania i zmienić jej zachowanie w innych trybach.
Aby z niego skorzystać, należy skompilować Vima
+langmap
, możesz sprawdzić, czy ta opcja jest włączona za pomocąecho has('langmap')
: jeśli polecenie zwróci,1
opcja jest włączona, inaczej będziesz musiał uzyskać konfigurację z włączoną tą opcją (aby wiedzieć, jak to zrobić, to to kolejne pytanie).Gdy jest włączona, opcja bierze pary znaków, na przykład
set langmap += à@
pozwala na dodanie znakuà
w buforze, gdy jesteś w trybie wstawiania, a wpisanie a,à
ale wpisanieà
w trybie normalnym spowoduje wyzwolenie@
znaku (ten przykład może być przydatny w przypadku azerty klawiatury, aby ułatwić pracę z makrami).Aby użyć langmapy w języku greckim, możesz postępować zgodnie z przykładem podanym podczas
:h 'langmap'
dodawania tej linii do twojegovimrc
(Kopiowanie tej linii z tego miejsca może nie być dobrym pomysłem, ponieważ tak naprawdę nie jestem pewien co do kodowania, prawdopodobnie wyrwanie linii bezpośrednio z pliku pomocy jest prawdopodobnie bezpieczniej) :Teraz z tego, co rozumiem w twoich komentarzach, pozostaje problem, gdy próbujesz użyć predefiniowanych poleceń: po wpisaniu polecenia wyzwalane jest zachowanie trybu wstawiania zamiast zachowania zdefiniowanego w mapie langmap. Niestety nie jestem pewien, czy mam na to dobre rozwiązanie. Jednym z pomysłów może być przedefiniowanie poleceń, na przykład:
W ten sposób po wpisaniu polecenia
λς
Vim wykona polecenie ,lw
ale widzę kilka wad tej metody:Być może więc wtyczka zaproponowana przez @Alexandra Myszkowa w odpowiedzi na to pytanie może być przydatna (ponieważ nigdy nie próbowałem żadnej z nich, nie wiem, czy rozwiązały problem, ale wygląda na to, że tak).
źródło
Piszę regularnie po angielsku i szwedzku. Szwedzki jest mniejszym problemem do rozwiązania niż grecki, ponieważ rozszerza alfabet angielski tylko o kilka znaków, ale myślę, że moje rozwiązanie można przenieść na grecki.
Przełączałem się za pomocą przełącznika klawiatury systemowej mojego systemu operacyjnego. Problem polega na tym, jak zauważył OP, że łamie całą masę poleceń, ponieważ w trybie normalnym każdy klawisz wysyła kolejny sygnał do Vima za pomocą nieanglojęzycznej klawiatury. W układ klawiatury szwedzkiej zresztą cała masa znaków alfabetycznych nie są przenoszone, aby zrobić miejsce dla nowych znaków
å
,ä
iö
. Na przykład}
jest pisany za pomocą Alt-Shift-9 (pasujący do nawiasu otwierającego na angielskiej klawiaturze), a odwrotny ukośnik jest pisany za pomocą Alt-Shift-7. Przejście na waniliowy szwedzki układ klawiatury dla insertmode powoduje więc wiele problemów.Moim rozwiązaniem było ponowne mapowanie odpowiednich kluczy tylko w trybie insertm i zawinięcie tych mapowań w funkcję, aby móc łatwo przełączać się tam iz powrotem. Poniższy kod pokazuje, jak to zrobiłem
.vimrc
. Dodaje to tylko potrzebne mi znaki do pozycji w szwedzkim układzie klawiatury, pozostawiając wszystko inne. Aby wpisać znaki, które są maskowane przez nich (;
,:
,[
,{
,"
, i'
), po prostu uderzyć dwa razy klawisz. Na szczęście tylko głupi ludzie muszą nawet wpisać dwaä
s z rzędu. (Jeśli to podwójne uderzenie nie jest odpowiednie, możesz zmapować je na Ctrl lub coś w tym rodzaju. Podstawową zasadą jest to, że zamaskowane postacie pozostają na swoim miejscu na klawiaturze, ale jedno naciśnięcie klawisza zostaje usunięte z realizacji. Uważam, że jest to o wiele łatwiejsze niż ich przenoszenie.) Co oznacza, że kiedy chcę pisać po szwedzku, klikam<Leader>s
, co powoduje przełączenie na te mapowania i zastosowanie sprawdzania pisowni w języku szwedzkim. Aby wrócić, robię to<Leader>e
.W przypadku języka greckiego oznaczałoby to wykonanie mapowań dla całego alfabetu, co w rzeczywistości jest mniej kłopotliwe, niż się wydaje, gdy zasada zostanie zniesiona. W takim razie trudną częścią byłoby odwzorowanie wszystkich tych zmian po przejściu na angielski. Być może ktoś może wymyślić sprytny sposób na zrobienie tego.
Planuję wykonać funkcję wstawiania, taką jak poniżej, dla języka arabskiego, innego języka, który często wpisuję. Mogę tu wrócić, aby zgłosić proces.
źródło
Piszę też w dwóch językach: rosyjskim i angielskim. A teraz korzystam z tej wtyczki https://github.com/lyokha/vim-xkbswitch . Ta wtyczka jest zależna od natywnego przełącznika układu klawiatury, w systemie Mac OS X możesz użyć jednego z moich https://github.com/myshov/xkbswitch-macosx .
źródło