실제로 구문을 강조 표시하기 위해 Vim에서 중첩 구문 강조를 얻으려면 어떻게해야합니까?Vim에서 구문 강조 기능을 중첩하는 방법은 무엇입니까?
다른 언어, 특히 SQL, Groovy, JavaScript, PHP 및 AppleScript의 코드를 문자열에 포함 할 수있는 언어 구문 파일을 작성하고 있습니다. 나는 첫 번째 언어를 작동시키고 언어가 무엇인지 지정하는 임베디드 언어의 주석을 사용하여 이러한 문자열을 시작함으로써 혼자서 쉽게 사용하기를 바라고 있습니다. 여기 예제 :이 코드 내 syntax/plugin.vim
파일의 끝에 순간
runtime! syntax/sql.vim
unlet b:current_syntax
syntax include @sql_code syntax/sql.vim
syntax region fm_sql_code start /"\/\*lang=sql\*\// keepend end=/\v"/ [email protected]_code
: 내 구문 파일에서
ExecuteSQL("/*lang=sql*/ SELECT *
FROM table
WHERE id = ?";
""; "";
456
)
나는 다음과 같은 코드의 라인을 가지고있다.
au FileType fmcalc runtime! syntax/sql.vim
au FileType fmcalc unlet b:current_syntax
au FileType fmcalc syntax include @sql_code syntax/sql.vim
au FileType fmcalc syntax region fm_sql_code start /"\/\*lang=sql\*\// keepend end=/\v"/ [email protected]_code
는 지금까지 코드의 위치는 결과를 변경되지 않은 :하지만 또한
ftplugin/plugin.vim
의 코드를 넣어하지만 실행하기
autocmd
의를 사용하여 시도했습니다.
<c-s-p>
을 눌러 현재 문자의 구문 스택을 볼 수있는 매핑이 있습니다.
결과는 위와 같이 커서가 문자열에있을 때 스택이 ['fm_sql_code', 'sqlString']
으로 표시됩니다. 그래서 그것은 내장 된 문법을 탐지하지만 그것을 문자열로 표시합니다. 문제는 텍스트가 문자열 리터럴처럼 SQL 언어 코드로 강조 표시되지 않는다는 것입니다.
내 첫번째 생각은이 일 것을 이었기 때문에 나는 따옴표를 포함하는 지역에 사용하고, 그래서 다음에 그 변경 시도 정규식 :
syntax region fm_sql_code start=/"\@=\/\*lang=sql\*\// keepend end=/"\@=/ [email protected]_code
하지만 그건에 실패 문자열을 SQL로 보아라. 위 예제의 구문 스택은 문자열의 기본 구문 이름 인 ['fm_string_literal']
을 반환합니다.
도움을 주시면 감사하겠습니다.
왜 let 및 unlet? – FDinoff