마크를 이전 값으로 설정


9

때로는 마크를 사용하여 mA, mB... 및 'A, 'B...을 사용하여 다른 파일을 쉽게 탐색 할 수 있습니다 .

그리고 때로는 부주의 또는 이유가 무엇이든간에 (내가 인정하고 싶은 것보다 더 자주) 인정 m[LETTER]하고 싶지 않은 경우 이전 값을 지우는 기존 마크를 사용 합니다. 내가 할 때 대부분의 경우 원래 마크가 가리키는 파일을 열지 않았습니다.

이 경우, 내가 실수를했다는 것을 즉시 깨달았을 때, 가리키는 위치를 기억하고이 위치로 이동 한 후 다시 설정하는 것 외에 내 마크의 이전 값을 얻을 수 있습니까?

나는 문서에서 그런 명령을 찾지 못했기 때문에 존재하지 않는 경우이 상황에서 사용하는 영리한 해결 방법이 있습니까?


1
또한 자세한 내용은이 게시물을 참조하십시오. superuser.com/questions/687441/…
nobe4

@ Nobe4 귀하의 링크에 감사드립니다. 찾을 수 없었지만 실제로는 쉽게 할 수 없음을 확인하는 것 같습니다.
statox

개인 메모리와 함께 점프 명령 ( ctrl-o, ctrl-i:jumps)을 사용하십시오. :
VanLaser

답변:


5

다음은 원하는 것을 대략적으로 수행하는 기본 VimScript입니다.

실제로 마크를 설정 하기 위해 원본 을 호출하기 전에 현재 값을 저장하기 위해 ma스루 mz매핑을 재정의합니다 . 우리는 또한 정의 를 통해 말했다 마크의 역사를 표시합니다.g:previous_marksm<Leader>ma<Leader>mz

정보를 g:previous_marks보다 체계적인 방식 으로 저장하고 위치를 보지 않고 마크를 신속하게 복원하는 기능을 추가하려고하지만이 예제는 수행 방법을 보여줍니다. 추가 조정은 연습으로 남습니다. 독자에게 ;-)

let g:previous_marks = {}
fun! MyMark(mark)
    let l:marks = ''
    redir => l:marks
        try
            silent! execute 'marks ' . a:mark
        catch
        endtry
    redir END

    if l:marks != ''
        if !has_key(g:previous_marks, a:mark)
            let g:previous_marks[a:mark] = []
        endif
        call add(g:previous_marks[a:mark], split(l:marks, "\n")[1])
    endif

    execute 'normal! m' . a:mark
endfun

fun! ShowHistory(mark)
    if !has_key(g:previous_marks, a:mark)
        echoerr 'No history for ' . a:mark
        return
    endif

    for l:line in g:previous_marks[a:mark]
        echo l:line
    endfor
endfun

fun! MakeMappings()
    for l:char in range(97, 122)
        let l:char = nr2char(l:char)

        execute 'nnoremap <silent> m' . l:char . ' :call MyMark("' . l:char . '")<CR>'
        execute 'nnoremap <silent> <Leader>m' . l:char . ' :call ShowHistory("' . l:char . '")<CR>'
    endfor
endfun

call MakeMappings()

평소 놀라운 답변으로 와우! 나는 이번 주말에 독자를위한
연습

2

정확히 원하는 것은 아니지만 더 유용한 서명 플러그인입니다. 현재 여백을 여백 여백에 표시로 표시하고 편집하기위한 간단한 바로 가기가 있습니다. 또한 빠른 액세스를 위해 표지판 목록을 위치 목록에 넣을 수도 있습니다.


나는 마진에 눈에 띄는 마크를 좋아하지 않지만 그것을 살펴볼 흥미로운 기능이있는 것 같습니다.
statox

@statox 같은 맥락에서 showmarks있습니다 . 문자 그대로 모든 마크를 표시하며 (위의 플러그인은 알파벳 만 처리 함) 키로 전환 할 수 있습니다. 가끔 유용하다고 생각합니다.
사토 카츠라

예, 나는 서명과는 달리 몇 시간 동안 표시를 사용하고 있습니다. 그래서 나는 마진의 팬이 아니라고 말하지만 서명을 시도하고 있습니다. :-)
statox

2

실제 문제는 여러 파일 / 위치 간 탐색 인 것처럼 보이 므로 Unite 플러그인을 기반으로하는이 간단한 솔루션을 제안합니다 .

:Unite jump -auto-preview

이 명령 ( <leader>j예를 들어 어떤 것에 매핑 될 수 있음 )은 미리보기 와 함께 점프 목록을 보여줍니다. j/로 목록을 탐색 할 때마다 k해당 파일의 커서 위치 주위에 여러 줄이 표시됩니다.

여기에 이미지 설명을 입력하십시오


대안 :

기본 마크는 덮어 쓰기가 매우 쉽습니다. 이름이 지정된 북마크는 예를 들어 simple_bookmarks 플러그인 과 같이 사용 사례에 더 적합 할 것 입니다.


문제가 이러한 유형의 탐색이라고 실제로 말할 수는 없습니다. 왜냐하면 이러한 마크를 실제로 가끔씩 사용하기 때문에 대부분 내 파일을 다르게 탐색하기 때문입니다. 그럼에도 불구하고 오랫동안 점프 목록을 더 자주 사용해야한다고 생각해 왔으므로 좋은 방법처럼 보입니다!
statox

vim 세션간에 저장할 수 있어도 마크를 덮어 쓰기가 너무 쉽습니다. 대체 솔루션을 추가했습니다.
VanLaser

실제로 대체 솔루션은 시도해 볼만한 가치가있는 것 같습니다!
statox
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.