포트란 관련해서 vim편집기 사용 시 주석에 있는 '에 의해 많은 줄들이 컬러처리되는 문제

sangjun11316의 이미지

안녕하세요, 수치해석 관련해서 포트란을 사용하고 있는 학생입니다.

vim편집기로 f파일을 열다보면 주석처리된 문장 속에 ' 가 등장할 경우, 다음 '가 등장할 때 까지의 모든 문장이 빨간색으로 색이 입혀지는 문제가 있습니다.

예를들어

c # we're near end of computation

if (method(4) .eq. 1) then
write(6, 601) n, cfl, dt, t
601 format('CLAW2...Step', i6, 'Courant number = ', f6.3, 'dt =', d12.4, 't =', d12.4)
endif

c

위와 같이 작성되어 있는 줄이 있다면 주석처리되어 있는 첫 번째 줄의 we're 에 있는 ' 부터 시작해서 601로 시작하는 4번째 줄의 CLAW2 앞에 등장하는 ' 까지 모두 다 문자처리가 되어 빨간색이 입혀집니다.

보기에는 불편해도 코드가 돌아가는데 문제가 없어서 지금까지는 그냥 쓰고 있었는데 막상 해결책을 찾아보니 마땅한 해결책이 검색되지가 않네요.

혹시 해결책 알고 계신 분이 계신지요?

jachin의 이미지

vim 8.1 버전에선 문제없이 출력되는 것을 볼 수 있습니다.

sangjun11316의 이미지

찾아보니

yum install vim-enhanced

와 같이 입력해서 최신버전을 받을 수 있는 것 같은데, 이게 root 권한이 필요하네요.
연구실 서버 root권한을 얻어서 잘못 입력했다가 뭔가가 꼬여버릴까바 웬만하면 제 로컬 디렉토리에만 설치를 해 보고 싶은데, 혹시 방법을 아시나요?

jachin의 이미지

문법이 강조되어 색상이 바뀌어 보이신다면, 이미 vim-enhanced 는 설치되어 있으실 겁니다. (vim-enhanced 는 vim 자체이기도 하니까요.)

syntax highlight 자체의 문제이기도 하니, 최신의 fortran.vim 을 설치해보시면 어떨까요?

https://github.com/vim/vim/blob/master/runtime/syntax/fortran.vim

위의 파일을 ~/.vim/after/indent 에 저장하시고( https://www.vim.org/scripts/script.php?script_id=2299 참조 ) 실행해보시면 될 것 같습니다.

그리고 vim 버전이 어떻게 되시나요? CentOS 6 를 쓰고 계신건가요?

ymir의 이미지

작은 따옴표 사이의 문자열을 파싱하기 때문에, c 를 주석으로 인식하지 않는다면..
계속해서 같은 문제가 발생할 것으로 보입니다.
아래분 의견대로 c 대신 ! 를 쓰거나, fortran.vim 에 c 를 주석으로 인식하도록 수정하면 될 것 같습니다.

- syn match fortranComment    excludenl "!.*$" contains=@fortranCommentGroup,@spell
+ syn match fortranComment    excludenl "^[!c].*$" contains=@fortranCommentGroup,@spell

되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』

sangjun11316의 이미지

fortran.vim 파일이 없길래

.vim/after/indent/

이 디렉토리들을 만들어서 그 안에 fortran.vim 을 만들어서 말씀해주신

- syn match fortranComment excludenl "!.*$" contains=@fortranCommentGroup,@spell
+ syn match fortranComment excludenl "^[!c].*$" contains=@fortranCommentGroup,@spell

을 입력해봤는데 별 다른 변화가 없네요 ㅠ.ㅠ

사실 색이 어떻게 나오니 하는건 매우 부수적인 거라서 이후에 시간여유가 좀 더 생기면 fortran.vim 등을 공부해서 기초를 갖추고 질문을 해야 답변해주시는 분들의 조언을 제대로 이해하고 적용할 수 있을 것 같습니다. 환경설정에 대한 기초가 없으니 많은 분들이 친절하게 답변해주셨는데 그걸 제가 제대로 써먹질 못하네요 ㅜㅜ

친절한 답글 감사드립니다!

ymir의 이미지

앞에 - 와 + 는 diff 의 의미와 마찬가지로..
- 의 내용을 가진 라인을 삭제하고 대신에 + 가 있는 라인의 내용으로 교체하라는 뜻입니다.

vim 과 같이 패키징 되어 있는 syntax 파일들은..
/usr/share/vim/vim80/syntax/fortran.vim 과 같이 해당 vim 버전 아래 syntax 디렉토리에 있습니다.
vim 에서 :scriptname 을 입력하시면, 로드된 파일들의 목록을 확인할 수 있습니다.

되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』

익명 사용자의 이미지

포트란에 c로 시작하는 키워드가 있기 때문에, 이걸 고려해서 조금 수정하면 좋을 거 같습니다.

컬럼 0이 C 또는 c이고, 컬럼 1이 공백이면 ... 식의 조건으로요.

ymir의 이미지

아 그렇군요. 사실 포트란은 잘 몰라서 그냥 fortran.vim 에 있는 걸 살짝 가져왔습니다.
fortran_fixed_source 가 1 이면 fortranComment 가 "^[!c*].*$" 와 같이 정의되는데..
조건문 밖에서 그냥 fortranComment 를 다시 한 번 더 정의를 하더라구요.
두 번째 fortranComment 가 else ~ endif 사이로 들어가야 하는게 아닐까 싶기도 한데..
좀 아시는 분들이 의견 주시면 좋을 것 같네요.

if (b:fortran_fixed_source == 1)
  if !exists("fortran_have_tabs")
    "Flag items beyond column 72
    syn match fortranSerialNumber   excludenl "^.\{73,}$"lc=72
    "Flag left margin errors
    syn match fortranLabelError "^.\{-,4}[^0-9 ]" contains=fortranTab
    syn match fortranLabelError "^.\{4}\d\S"
  endif
  syn match fortranComment      excludenl "^[!c*].*$" contains=@fortranCommentGroup,@spell
  syn match fortranLeftMargin       transparent "^ \{5}"
  syn match fortranContinueMark     display "^.\{5}\S"lc=5
else
  syn match fortranContinueMark     display "&"
endif
 
syn match fortranComment    excludenl "!.*$" contains=@fortranCommentGroup,@spell

되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』

sangjun11316의 이미지

$ vim --version

을 입력하면

VIM - Vi IMproved 7.2 (2008 Aug 9, compiled Feb 15 2011 05:27:32)

라는 메세지가 뜹니다.

말씀해주신 fortran.vim 파일을 보면 뭔가 선행해서 올바른 디렉토리에 설치해둬야 하는 파일이 있는 것 같은데, 그 파일이 있다는 링크를 들어가면 http forbidden 과 같은 메시지가 뜨면서 접속이 되질 않네요.

급한 문제도 아니고, 매우 부수적인 문제인데 생각보다 시간이 많이걸리네요...ㅋㅋㅋ

기본적인 fortran.vim, 혹은 vim 환경설정에대해 좀 더 스스로 공부해본 다음에 다시 질문올리도록 하겠습니다. 답변 감사합니다!

jachin의 이미지

syntax 관련 룰이라 ymir 님께서 말씀해주신 것처럼 syntax rule 만 변경하면 될 것 같습니다.

7.4.1099 로 테스트 해봐도 괜찮던데... 음... 아쉽네요.

세벌의 이미지

.vimrc 파일에 다음 줄을 넣어 보셔요.

syntax off
sangjun11316의 이미지

위와 같이 ' 사이의 문자들이 전부 다 똑같은 색으로 컬러링되는 문제를 해결하고 싶어서요 ㅜㅜ

익명 사용자의 이미지

대충 살펴보았는데 c 로 주석처리하면 예전 문법으로 인식하는 거 같습니다.

c 를 ! 로 빠꿔 보세요.

sangjun11316의 이미지

지금 예전에 전문가(?) 분들이 짜 두신 코드들로 공부를 하는 중이라 c 로 표시되어 있는 주석들을 어떤 환경설정으로 일괄적으로 해결할 수 없을까 싶어 질문드렸던 것인데 쉽지 않네요ㅠㅠ (c 로 되어있어도 주석으로 인식하기는 합니다. 다만 '에 대한 색처리에서 다소 문제가 있을 뿐이죠)

모쪼록 친절한 답변 감사드립니다!

익명 사용자의 이미지

ymir님 글 참고했습니다.
c로 시작하는 키워드는 따로 포트란 키워드로 제대로 인식하기 때문에 신경쓰지 않아도 될거 같습니다.

au BufRead,BufNewFile *.f syntax match Comment "^[!Cc*].*$"

를 ~/.vimrc 파일에 추가해 줍니다.

sangjun11316의 이미지

이렇게 하니까 c로 시작하는 문장들도 코멘트로 제대로 표시를 해주네요. 감사합니다 ㅎㅎ

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.