Development Tip

Vim에서 Bash 스크립트를 강조하는 방법은 무엇입니까?

yourdevel 2020. 10. 31. 10:14
반응형

Vim에서 Bash 스크립트를 강조하는 방법은 무엇입니까?


내 Vim 편집기는 PHP 파일 ( vim file.php), HTML 파일 ( vim file.html) 등을 자동으로 강조 표시합니다 .

그러나 입력 할 때 : vim file그리고 그 안에 Bash 스크립트를 작성하면 강조 표시되지 않습니다.

Vim에게 Bash 스크립트로 강조 표시하도록하려면 어떻게해야합니까?

#!/bin/bash파일 상단에서 타이핑 시작 했지만 작동하지 않습니다.


쉘 스크립트에 .sh확장 을 올바르게 제공하고 있습니까? Vim의 자동 구문 선택은 거의 완전히 파일 이름 (확장자) 감지를 기반으로합니다. 파일에 구문 세트가 없거나 잘못된 구문 인 경우 Vim은 주어진 언어로 스크립트를 입력하기 시작했기 때문에 올바른 구문으로 자동 변경되지 않습니다.

임시 해결 방법으로이 명령 :set syn=sh은 쉘 스크립트 구문 강조를 켭니다.


지금까지의 대답 은 파일 형식을 식별하기 위해 확장자 (예 .sh:) 또는 shebang 줄 (예 :)을 사용할 수 있다는 점에서 정확합니다 #!/bin/bash. 이들 중 하나가없는 경우에도 파일 상단 또는 하단에있는 modeline 주석을 사용하여 수동으로 파일 유형을 지정할 수 있습니다.

예를 들어 확장자가없는 스크립트를 쉘 스크립트로 식별하려면 다음 주석을 파일 상단에 추가 할 수 있습니다.

# vim: set filetype=sh :

또는

# vim: filetype=sh

그러면 vim이 파일을 쉘 스크립트로 취급하도록 지시합니다. (모델 라인에서 다른 항목도 설정할 수 있습니다. :help modeline자세한 내용은 vim 유형 에서 확인하세요.)


실제로 구문 강조는 vi가 아닌 vim의 기능입니다. vim 명령을 사용해보십시오.

:syntax on.


Vim은 내용을 검사하여 파일 유형을 감지 할 수도 있습니다 (예 : 첫 번째 줄에 bash shebang이 포함 된 경우). 다음은 filetype.txt도움말 파일 의 인용문입니다 .

파일의 내용을 검사해야만 파일 유형을 감지 할 수있는 경우

사용자 런타임 디렉토리를 만듭니다. 일반적으로 'runtimepath'옵션의 첫 번째 항목을 사용합니다. 유닉스의 예 :

:!mkdir ~/.vim

이를 위해 vim 스크립트 파일을 만듭니다. 예:

if did_filetype()   " filetype already set..
    finish      " ..don't do these checks
endif
if getline(1) =~ '^#!.*\<mine\>'
    setfiletype mine
elseif getline(1) =~? '\<drawing\>'
    setfiletype drawing
endif

더 많은 예제는 $ VIMRUNTIME / scripts.vim을 참조하십시오. 이 파일을 사용자 런타임 디렉토리에 "scripts.vim"으로 작성하십시오. 예를 들어, Unix의 경우 :

:w ~/.vim/scripts.vim

감지는 즉시 작동하므로 Vim을 다시 시작할 필요가 없습니다.

scripts.vim은 파일 유형에 대한 기본 검사 전에로드됩니다. 즉, 규칙이 $ VIMRUNTIME / scripts.vim의 기본 규칙보다 우선합니다.


나는 bashPOSIX 쉘이 아닌 구문 을 강조하는 방법을 구체적으로 찾고이 답변에 왔습니다 . 단순히 set ft=sh(또는 이에 상응하는) 파일을 POSIX 셸에 대해 bash강조 표시하여 유효한 구문을 빨간색 으로 강조 표시합니다. bash 강조 표시를 얻으려면 다음을 수행하십시오.

" Set a variable on the buffer that tells the sh syntax highlighter
" that this is bash:
let b:is_bash = 1
" Set the filetype to sh
set ft=sh

ft이미 sh경우 여전히 set명령이 필요합니다 . 그렇지 않으면 let즉시 적용되지 않습니다.

변수를 전역으로 만들어이를 전역 기본값으로 만들 수 있습니다 let g:is_bash = 1.

:help ft-sh-syntax내가 찾아야 만하는 매뉴얼 페이지입니다. 이를 설명하고 다른 껍질의 특징을 강조하는 방법을 설명합니다.


vim은 상단 댓글로 감지 할 수 있습니다.

파일 상단에서이 줄을 시도하십시오.

#!/bin/sh

파일 상단에 shebang을 추가 한 후 저장하고 다시로드하면 (예 :) :w|e구문 색상이 시작될 수 있습니다.

Vim inconsistently syntax highlighting bash files를 참조하십시오 . 받아 들여지는 답변도 도움이 될 수 있습니다.


vim은 기본적으로 많은 파일 유형을 이미 인식하고 있습니다. 대부분은 파일 확장자로 작동하지만 이와 같은 경우 vim은 파일의 내용을 분석하여 올바른 유형을 추측합니다.

정력과 같은 특정 파일 이름의 파일 형식 설정 .bashrc, .tcshrc등을 자동으로. 그러나 .sh확장자가 있는 파일 은 csh, ksh 또는 bash 스크립트로 인식됩니다. 이것이 정확히 어떤 종류의 스크립트인지 확인하기 위해 vim은 파일의 첫 번째 줄을 읽고 #! 선.

If the first line contains the word bash, the file is identified as a bash script. Usually you see #!/bin/bash if the script is meant to be executed directly, but for a shell configuration file using a simple # bash would work as well.

If you want to look at the details, this is implemented in $VIMRUNTIME/filetype.vim.


Probably the easiest way to get syntax highlighting on a new file, is to just reload it after writing the shebang line. A simple :w :e will write out the file, reload it, and interprete the shebang line you have just written to provide you with the appropriate syntax highlighting.


If you already know the file-type before opening the script or if you're creating a new script without an extension which is common, you can pass it to vim on the command-line like so:

vim -c 'setfiletype sh' path/to/script
vim -c 'setfiletype python' path/to/script

When you create a new file, only the filename detection comes into play; content detection (#!/bin/bash) doesn't apply if you type it after creating a new buffer.

The sensible thing is to just do :set ft=bash the first time around, and the next time you edit it, the #!/bin/bash will set the right filetype automatically.

참고URL : https://stackoverflow.com/questions/2576687/how-to-highlight-bash-scripts-in-vim

반응형