2013-04-11 2 views
4

이미 존재하는 단일 문자 표시에 추가 표시를 설정할 수 있기를 바랍니다. 따라서, 나는 현재 직면하고 두 problemes 해결할 수 : vim으로 무제한 표시를 만들 수 있습니까?

  1. 마크

    스크립트에서 설정을하고 난 이미 스크립트의 사용자가 설정 한 표시를 파괴하지 않으

  2. 무수한 자국을 설정할 수있어서 (예 : "script_mrk_" . s:mark_count과 같은 이름을 붙일 수 있습니다.) 함수 호출로 표현하면

그래서, 나는 아마

setPrivateMark(l:mark_name, l:line, l:pos) 

물론

let line_pos = getPrivateMark(l:mark_name) 

이 솔루션은 위의 버퍼 변화에 저항해야 뭔가를 찾고 있어요 마크를 setPrivateMark로 설정 한 후 getPrivateMark(...) 앞에 표시하십시오.

그런 것이 있습니까?

+0

당신은 마크가 스크립트에 설정되어 있다고 말했습니다. 무슨 목적을 위해? 일반적으로 스크립트가 설정을 마쳤다면 아마도 더 나은 접근 방법 일 것입니다. –

+0

현재 마크는 쌍으로 나타납니다. 하나의 표식이 시작되고 다른 표식은 다양한 기능이 호출 될 때 다르게 표시 할 코드의 "특수"구역을 끝냅니다. –

+0

대신 사용자 지정 구문을 사용하여 이것을 수행했다고 생각하십니까? 이러한 코드 섹션이 정의되는 방식에 따라 작업에 이상적인 것처럼 들립니다. –

답변

2

빔은 변경시 내장 마크의 위치 만 업데이트합니다. 해당 기능이 필요한 경우 기존 기능을 사용해야하며 기존 표시의 수에 제한됩니다.

주위를 둘러 볼 방법이 없습니다. 간단한 사용자 편집의 경우 CursorMovedI 이벤트에 연결하여 기록 된 위치를 적용 할 수 있지만 :append과 같은 Ex 명령을 연결할 수는 없습니다.

플러그인에 몇 가지 점수가 필요한 경우 사용자가 스크립트에서 사용하는 기호 (예 : g:MyPlugin_UseMarks 변수)를 구성하도록 허용하는 것이 좋습니다. 누구나 항상 모든 표시를 사용하지는 않지만 다른 사람들은 다른 기호를 사용합니다.

+0

+1 어떤 질문을하든 항상 통찰력있는 답변을 줄 수 있습니다. – Kent

0

무제한 마크 잘 모르겠지만 사전 유형을 만들 수 있습니다. 키는 "마크"이름이고, 값은 커서의 위치입니다.

위치는

getpos() and setpos() 

에 의해 설정 얻을 수 있습니다 또는 당신은 실제 코드를 원하는?

+0

글쎄, 만약 사용자가'getpos()'로 평가 한 좌표 위에 라인을 삽입하거나 삭제하면, 좌표는 더 이상 정확하지 않을 것입니다. –

+0

사실입니다. 그래서 ** 실제 ** 마크가 필요합니다. 마크가 아닙니다. 귀하의 스크립트에서만 사용됩니다 .. – Kent

+0

예.사용자는 private mark를 설정하거나 수정하고, 스크립트가 리턴하고, 사용자가 버퍼를 편집하고 (변경된 텍스트로 private mark가 흐르도록) 스크립트의 기능을 호출하고 * then * 사용자가 스크립트를 다시 호출한다. 스크립트는 이전에 설정 한 표시가 필요합니다. –

관련 문제