2012-02-01 10 views
5

mam zmapowany Ctrl - j aby przejść do poniższej bufora. Jednak trudno było zmapować na coś innego, więc musiałem napisać pierwszy wiersz poniżej, aby uczynić go mappable pod adresem wszystko.Mapowanie <C-j> do czegoś w vim

Poniższy skrypt działa idealnie, z wyjątkiem sytuacji, gdy piszę pliki .sh. Mam zainstalowaną wtyczkę bash-support .

let g:C_Ctrl_j = 'off' 
map <C-j> <C-w>j 

EDYCJA: Właśnie się dowiedziałem, że problem jest w obsłudze bash. Bash-support map Ctrl - j aby przeskoczyć wstawkę (lub coś w tym stylu), która przesuwa kursor na predefiniowany punkt i przechodzi do trybu wstawiania. Chyba zmienię to w skrypcie bash-support zrobi to zadanie, chociaż nie lubię bawić się z tymi plikami.

EDIT2: let g: C_Ctrl_j = "off" faktycznie zmienia funkcję wstawiania wtyczki csupport.

Odpowiedz

6

Według the document of bash-support.vim:

Pierwotne znaczenie Ctrl-j jest 'ruch [n] linie w dół' (zob | CTRL-j |). Jeśli jesteś przyzwyczajony do używania wartości domyślnych i nie lubisz tych celów, możesz je wyłączyć. Wstaw następujący wiersz do pliku ".vimrc”:

Niech G: BASH_Ctrl_j = 'off'

Tak, że trzeba umieścić let g:BASH_Ctrl_j = 'off' do swojego vimrc.

Dodatkowo, użyj nnoremap <C-j> <C-w>j zamiast map <C-j> <C-w>j w swoim vimrc. Drugi definiuje odwzorowania klawiszy w trybach Normalny, Wizualny i Operator-w trakcie. Mapowania klawiszy są również rekursywnie rozwijane. Może to spowodować problemy podczas definiowania większej liczby odwzorowań kluczy.

5

Ctrl - j (0x0A) jest znakiem specjalnym, Line Feed.

Jest duża szansa, że ​​ten klucz jest nie-press nie jest przybyciu vim jako Ctrl - j (0x0A).

w vim w oknie Terminal.app na moim Macu, wpisując Ctrl - vCtrl - j wyświetlacze ^@ (0x00 lub NULL). Natomiast Ctrl - vCtrl - g i Ctrl - vCtrl - k wyświetlacza ^G i ^K odpowiednio.

Sugeruję użyciu innego mapowania (lub po prostu trenuje się używać Ctrl - wj).

+1

let g: C_Ctrl_j = 'off' Usuwa twarde odwzorowanie Ctrl-j do Line Feed. –

+1

Naprawdę? Gdzie to jest udokumentowane? Próbowałem na dwóch komputerach i nie ma to znaczenia. – Johnsyweb

+2

http://lug.fh-swf.de/vim/vim-doc/csupport.html#csupport-Ctrl-j Jest to część dokumentacji csupport wyjaśniającej rolę Ctrl-jw wtyczce csupport. Czytałem o tym remedium gdzieś kilka miesięcy temu i nie mam pojęcia, gdzie to było. –

1

Spróbuj non rekurencyjnych mapowania,

nnoremap <C-j> <C-w>j 

powinno wystarczyć.

1

Miałem ten sam problem, ale z innego powodu. VIM-LaTeX używa wtyczki imaps.vim, która również zawiera remaps some keys, w tym Ctrl - j. Co pracował dla mnie jest, aby ustawić autocmd w moim .vimrc:

augroup vimrc 
    au! 
    au VimEnter * unmap <C-j> 
    au VimEnter * noremap <C-j> <C-w>j 
augroup END 

VimEnter spust zapewnia, że ​​remap będą wykonywane po uruchomieniu vim, a wtyczki są ładowane (jeśli rozumiem go poprawnie), więc nadpisuje mapy wtyczek imaps.vim. Odwzorowanie nie jest konieczne, ale nie może zaszkodzić.