Czy Vim może automatycznie powiększyć zakładkę, gdy kursor jej dotknie?Czy istnieje sposób, aby rozwinąć Vim-składanie automatycznie, gdy umieścisz na nim kursor?
Odpowiedz
Zobacz opcję foldopen
. Określa, które grupy poleceń będą prowadzić do otwarcia klapki, jeśli kursor zostanie przesunięty do zamkniętej klapki.
Zauważ, że ruchy pionowe nie otworzyć zamkniętą fałdę, choć. Ponadto nie ma ustawienia w foldopen
, aby włączyć to zachowanie. Gdy pozycja hor
jest ustawiona w opcji foldopen
, aby otworzyć składaną, można użyć h
, l
lub innych poleceń ruchu poziomego . W przypadku, gdy jest to niezbędne do automatycznego otwierania fałdę w każdym ruchu kursora, który dotyka, można zbliżyć się do tego problemu przez manipulowanie pewnego podzbioru ruchu pionowego poleceń, jak to pokazano poniżej.
nnoremap <silent> j :<c-u>call MoveUpDown('j', +1, 1)<cr>
nnoremap <silent> k :<c-u>call MoveUpDown('k', -1, 1)<cr>
nnoremap <silent> gj :<c-u>call MoveUpDown('gj', +1, 1)<cr>
nnoremap <silent> gk :<c-u>call MoveUpDown('gk', -1, 1)<cr>
nnoremap <silent> <c-d> :<c-u>call MoveUpDown("\<lt>c-d>", +1, '&l:scroll')<cr>
nnoremap <silent> <c-u> :<c-u>call MoveUpDown("\<lt>c-u>", -1, '&l:scroll')<cr>
nnoremap <silent> <c-f> :<c-u>call MoveUpDown("\<lt>c-f>", +1, 'winheight("%")')<cr>
nnoremap <silent> <c-b> :<c-u>call MoveUpDown("\<lt>c-b>", -1, 'winheight("%")')<cr>
function! MoveUpDown(cmd, dir, ndef)
let n = v:count == 0 ? eval(a:ndef) : v:count
let l = line('.') + a:dir * n
silent! execute l . 'foldopen!'
execute 'norm! ' . n . a:cmd
endfunction
niższej, ale nieco thriftier rozwiązaniem byłoby, aby otworzyć klapkę w każdym ruchu kursora.
autocmd CursorMoved,CursorMovedI * silent! foldopen
Niestety to rozwiązanie nie jest ogólne. Po złożeniu kursora pod kursorem kursor zostanie umieszczony na pierwszym wierszu tego zagięcia. Jeśli zachowanie to jest pożądane, można postępować kierunku pionowym ruch i umieścić kursor w ostatniej linii zagięcia, kiedy kursor porusza się z dołu do góry.
autocmd CursorMoved,CursorMovedI * call OnCursorMove()
function! OnCursorMove()
let l = line('.')
silent! foldopen
if exists('b:last_line') && l < b:last_line
norm! ]z
endif
let b:last_line = l
endfunction
Klapka nie zostanie otwarta, jeśli ruch przeskoczy nad zakładką. Dla przykład 2j
na linii tuż nad fałdą będzie umieścić kursor na linii właśnie po tej owczarni, a nie drugiej linii w nim.
Przywróć rozwiązanie 'CursorMoved' z poprzednich wersji. –
:help fdo
i ewentualnie :help fcl
może pomóc. Mam ten wiersz w moim .vimrc:
set foldopen=block,hor,insert,jump,mark,percent,quickfix,search,tag,undo
set foldopen=all
wydaje się zrobić to, co chcesz. Można również dokonać autokomendy dla ruchu kursora:
au CursorMoved * call AutoOpen()
wywołanie funkcji takich jak:
function! AutoOpen()
if foldclosed(".") == line(".")
call feedkeys("zo")
endif
endfunction
Jeśli chcesz to również pracować w trybie wstawiania, przeznaczenie:
au CursorMoved,CursorMovedI * call AutoOpen()
Niestety, to podejście ma wady (zobacz moją odpowiedź). –
@ib: Wiem, że nie jest doskonały, ale nie rozumiem jego wad. Czy możesz rozwinąć? Dzięki. – Eelvex
To oczywiste (i już opisane w mojej odpowiedzi, nawiasem mówiąc).Przesuń kursor do linii obok zamkniętej klapki i przesuń o jeden wiersz w górę (np. Za pomocą 'k'). Fałda zostanie otwarta, a kursor znajdzie się na pierwszym wierszu tego zagięcia, a nie na ostatnim, ponieważ powinien być logiczny (co oznacza semantykę pionowego ruchu linia po linii). Aby zobaczyć inną wadę, umieść kursor na linii tuż nad zamkniętą klapką i wpisz '2j'. Kursor przeskoczy całą fałdę, zostanie przesunięty nie o dwie linie w dół, ale o tyle linii, ile składa się. –
- 1. Czy istnieje sposób, aby dowiedzieć się, czy element ma pasek przewijania na nim za pomocą JQuery?
- 2. Czy istnieje sposób, aby Git pull automatycznie aktualizował submodules?
- 3. Czy istnieje sposób na absolutnie pozycjonowane elementy div, aby rozwinąć kontener?
- 4. Czy umieścisz dane na żywo w matplotlib?
- 5. Czy umieścisz PHP wewnątrz PHP z echo?
- 6. Czy istnieje sposób, aby anulować TabControl.Items.CurrentChanging?
- 7. Czy istnieje sposób, aby zignorować odpowiedź formularza?
- 8. Android Przesuń, aby rozwinąć widok
- 9. Czy istnieje sposób, aby uciszyć rejestrowanie hsqldb?
- 10. Czy istnieje sposób, aby wyczyścić django.db.connection.queries?
- 11. Czy istnieje sposób utworzenia skryptu, który automatycznie koryguje zeskanowane dokumenty?
- 12. Czy istnieje sposób, aby zapobiec zaokrąglaniu stringWithFormat?
- 13. Czy istnieje sposób, aby zleceniowe NSWindow spacjami
- 14. Czy istnieje sposób, aby wyświetlić wszystkie trasy na serwerze Hapi
- 15. Czy istnieje sposób, aby przejść dotyka na iPhone?
- 16. Czy Clojure ma "rozwinąć"?
- 17. Czy mogę skonfigurować IDLE, aby automatycznie konwertować tabulatory na spacje?
- 18. Czy istnieje sposób, aby zrobić git ponad limit czasu http?
- 19. Czy istnieje sposób, aby przyspieszyć sposób, w jaki moja siatka reaguje, gdy mam wiele wierszy?
- 20. Czy istnieje sposób na uzyskanie debuggera skryptów Google Chrome, aby złamać wyjątek?
- 21. Czy istnieje sposób, aby NetBeans automatycznie tworzył nawiasy w oddzielnym wierszu?
- 22. Jak zrobić div rozwinąć w pionie, aby zawinąć zawartość w nim?
- 23. Czy istnieje sposób na przeciążenie + = w python?
- 24. Czy istnieje sposób ustawienia REPL, aby zawsze pprint?
- 25. Gdzie umieścisz klucz szyfrowania na publicznym serwerze?
- 26. Czy istnieje sposób, aby strony github obsługiwały tryb org?
- 27. Czy istnieje sposób, aby sprawdzić, czy wartości nie numerycznej makro
- 28. Czy istnieje sposób na zamaskowane pole liczbowe?
- 29. Czy istnieje sposób na przetestowanie połączenia SQLAlchemy?
- 30. Jak rozwinąć program ms-explorer, aby automatycznie obsługiwać "połączone pliki"/pliki sidecar/xmp należące do jpg?
dlaczego akceptujesz odpowiedź Eternisa, a nie moją? Nie tylko zaproponowałem to rozwiązanie (i jego jeszcze bardziej elegancką wersję, 'au CursorMoved, CursorMovedI * sil! Foldo') * wcześniej *, co wynika z historii wersji, ale także rozwinęło sposób na bardziej konsekwentne rozwiązywanie problemu. –
Przepraszamy. Nie pamiętam, dlaczego to zrobiłem. Naprawiony. – dan