Vim이 커서를 터치하면 자동으로 접기를 확장 할 수 있습니까?커서를 올려 놓았을 때 Vim 접기를 자동으로 확장 할 수 있습니까?
답변
foldopen
옵션을 참조하십시오. 커서가 닫힌 폴드로 이동되는 경우 어떤 그룹의 명령이 으로 이어지는 지 제어합니다.
수직 이동은 닫힌 폴드를 열지 않습니다. 또한 이 동작을 사용하려면 foldopen
에 설정이 없습니다. hor
항목이 인 경우 , l
또는 기타 수평 이동 명령을 사용하여 foldopen
옵션을 설정할 수 있습니다. 에 접하는 커서 이동을 자동으로 열어야하는 경우 아래와 같이 수직 이동 명령의 일부 하위 집합을 다시 매핑하여 문제에 접근 할 수 있습니다.
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
열등하지만, 약간은 thriftier 솔루션은 모든 커서 움직임에 배를 열 것입니다.
autocmd CursorMoved,CursorMovedI * silent! foldopen
불행히도,이 해결책은 일반적인 해결책이 아닙니다. 커서 아래의 접기가 열리면 커서는 해당 접기의 첫 번째 줄에 배치됩니다. 이 동작이 바람직하지 않은 경우 의 수직 방향을 따라 이동하고 커서 이 아래 위로 이동하면 접기의 마지막 줄에 커서를 놓습니다.
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
그러나 이동이 폴드 위로 이동하면 폴드가 열리지 않습니다. 예를 들어, 의 경우 접힌 부분 바로 위에있는 행의 2j
은 두 번째 줄이 아닌 해당 접기 직후의 줄에 커서를 놓습니다.
이전 버전의'CursorMoved' 솔루션을 되돌립니다. –
:help fdo
그리고 아마도 :help fcl
이 도움이 될 수 있습니다.
set foldopen=block,hor,insert,jump,mark,percent,quickfix,search,tag,undo
set foldopen=all
당신이 원하는 것을 할 것 : 내 .vimrc 파일에서이 라인을 가지고있다.
au CursorMoved * call AutoOpen()
함수처럼 호출 :이 또한 삽입 모드에서 작업 할 경우
function! AutoOpen()
if foldclosed(".") == line(".")
call feedkeys("zo")
endif
endfunction
, 사용 :
au CursorMoved,CursorMovedI * call AutoOpen()
불행히도,이 접근법에는 단점이 있습니다 (제 답변 참조). –
@ib : 완벽한 것은 아니지만 단점을 이해하지 못합니다. 당신은 정교 할 수 있습니까? 감사. – Eelvex
그것은 명백합니다 (그리고 이미 내 대답에 설명되어 있습니다).닫힌 폴드 옆의 줄로 커서를 이동하고 한 줄 위로 이동합니다 (예 : 'k'사용). 접히는 부분이 열리 며 커서는 마지막 부분이 아닌 논리적으로 (줄 단위로 수직 이동의 의미를 의미하는) 해당 접기의 첫 번째 줄에있게됩니다. 또 다른 단점을 보려면 닫힌 접기 바로 위의 줄에 커서를 놓고'2j'를 입력하십시오. 커서는 전체 폴드 위로 뛰어 오를 것입니다. 두 줄 아래로 이동하지 만 폴드만큼 많은 줄이 있습니다. –
- 1. 마우스를 올려 놓았을 때 압핀에 대한 설명을 어떻게 추가 할 수 있습니까?
- 2. Vim 구문 파일 명령을 여러 줄로 확장 할 수 있습니까?
- 3. 커서를 대괄호로 이동하는 vim 명령이 있습니까?
- 4. 마우스를 올려 놓았을 때 웹 페이지에서 flv 또는 mp4를 확인하는 방법은 무엇입니까?
- 5. 항목에 마우스를 올려 놓았을 때 ListBox에서 항목의 색상 변경을 비활성화하는 방법은 무엇입니까?
- 6. 커서를 놓았을 때의 문자 위치에 커서를 두는 방법은 무엇입니까? (WPF RichTextBox)
- 7. 자동으로 vim 검색 결과 중앙에 놓기
- 8. javascript 입력 텍스트 상자에 마우스를 올려 놓았을 때 텍스트를 표시하는 방법은 무엇입니까?
- 9. vim : 확장 위치 : h
- 10. VIM 약어 커서 위치는
- 11. 사진에 마우스를 올려 놓으면 새 창을보실 수 있습니다
- 12. System.Delegate를 확장 할 수 있습니까?
- 13. DataColumn.Expression을 확장 할 수 있습니까?
- 14. vim vim은 비활성 창을 위/아래로 스크롤 할 수 있습니까?
- 15. 인터페이스에 확장 방법을 적용 할 수 있습니까?
- 16. 응용 프로그램에서 서버에 올려 놓았을 때이 오류를 어떻게 해결합니까? 내 서버에 내 ASP.NET 응용 프로그램을 배포 할 때
- 17. 는 t와 F로 커서를 이동 파라미터로서 VIM
- 18. 자동으로 복사 할 때
- 19. 핀이있을 때 자동으로 장소 제목을 표시 할 수 있습니까?
- 20. Vim 플러그인 도움말 : 커서를 중간에 넣은 상태에서 자동으로 닫는 브라켓 삽입
- 21. WCF를 자동으로 예약 할 수 있습니까?
- 22. Wakelock을 자동으로 해제 할 수 있습니까?
- 23. 애플리케이션을 실행/디버깅 할 때 오래된 인스턴스를 자동으로 종료 할 수 있습니까?
- 24. Androids Contacts 데이터베이스를 확장 할 수 있습니까?
- 25. vim을 사용하여 파일의 모든 기능을 자동으로 폴드 할 수 있습니까?
- 26. PowerShell에서 인덱서를 확장 할 수 있습니까?
- 27. vim 및 NERD 트리 확장 - 파일 추가
- 28. 커서를 숨긴 응용 프로그램을 xcode에서 디버깅 할 때 어떻게 다시 나타나게 할 수 있습니까?
- 29. 발견 된 문자열의 끝에 커서를 설정할 수 있습니까?
- 30. SimpleCursorAdapter로 설정할 때 커서를 닫을 수 없습니다.
한 이유를 당신은 또한 커서 이동을위한 자동 명령을 할 수 당신은 Eelvex의 대답을 받아 들일 뿐이지? 개정 내역에서 명백한 바와 같이이 솔루션 (그리고 훨씬 더 우아한 버전,'au CursorMoved, CursorMovedI * sil! foldo') *을 제안 할뿐만 아니라 문제를보다 일관되게 해결할 수있는 방법을 개발했습니다. –
죄송합니다. 왜 내가 그랬는지 기억이 안납니다. 결정된. – dan