Vim 在FORTRAN中如何将除字符串外的大小写从上改为下

Vim 在FORTRAN中如何将除字符串外的大小写从上改为下,vim,fortran,Vim,Fortran,我正在处理大量遗留代码,并将Vim视为代码格式化程序 我能否做到以下几点: 如果可能的话,我想把整个代码改成小写,除了字符串 此外,当textwidth设置为80时,gq命令将分隔长行。 在这种情况下,如何自动添加连续字符和行尾 如果有办法,请告诉我。你可以看看这个: 建议的解决办法是: :%s/\%(^\%([^']*'[^']*'\)*\)\@<=[^']\+/\=substitute(submatch(0),'\<\u\+\>','\L&','g')/g :%s

我正在处理大量遗留代码,并将Vim视为代码格式化程序

我能否做到以下几点:

  • 如果可能的话,我想把整个代码改成小写,除了字符串
  • 此外,当textwidth设置为80时,gq命令将分隔长行。 在这种情况下,如何自动添加连续字符和行尾

  • 如果有办法,请告诉我。

    你可以看看这个:

    建议的解决办法是:

    :%s/\%(^\%([^']*'[^']*'\)*\)\@<=[^']\+/\=substitute(submatch(0),'\<\u\+\>','\L&','g')/g
    

    :%s/\%(^\%([^']*'[^']*'\)*\@你可以看看这个:

    建议的解决办法是:

    :%s/\%(^\%([^']*'[^']*'\)*\)\@<=[^']\+/\=substitute(submatch(0),'\<\u\+\>','\L&','g')/g
    
    :%s/\%(^\%([^']*'[^']*'\)*\@随附集成的漂亮打印机:

    > cat foo.f90 && nagfor =polish -idcase=L -kwcase=L -margin=0 -noblank_line_after_decls -width=80 foo.f90 && cat foo.f90_pol
    PROGRAM P
      INTEGER :: I
      INTEGER :: THIS_INTEGER_VARIABLE_HAS_A_REALLY_LONG_NAME
      PRINT *, 'IS THIS THING ON?'
      I = THIS_INTEGER_VARIABLE_HAS_A_REALLY_LONG_NAME * THIS_INTEGER_VARIABLE_HAS_A_REALLY_LONG_NAME
    END PROGRAM P
    NAG Fortran Polisher Release 6.0(Hibiya) Build 1037
    [NAG Fortran Polisher normal termination]
    program p
      integer :: i
      integer :: this_integer_variable_has_a_really_long_name
      print *, 'IS THIS THING ON?'
      i = this_integer_variable_has_a_really_long_name* &
        this_integer_variable_has_a_really_long_name
    end program p
    
    (披露:我为NAG工作。)

    配备了集成的漂亮打印机:

    > cat foo.f90 && nagfor =polish -idcase=L -kwcase=L -margin=0 -noblank_line_after_decls -width=80 foo.f90 && cat foo.f90_pol
    PROGRAM P
      INTEGER :: I
      INTEGER :: THIS_INTEGER_VARIABLE_HAS_A_REALLY_LONG_NAME
      PRINT *, 'IS THIS THING ON?'
      I = THIS_INTEGER_VARIABLE_HAS_A_REALLY_LONG_NAME * THIS_INTEGER_VARIABLE_HAS_A_REALLY_LONG_NAME
    END PROGRAM P
    NAG Fortran Polisher Release 6.0(Hibiya) Build 1037
    [NAG Fortran Polisher normal termination]
    program p
      integer :: i
      integer :: this_integer_variable_has_a_really_long_name
      print *, 'IS THIS THING ON?'
      i = this_integer_variable_has_a_really_long_name* &
        this_integer_variable_has_a_really_long_name
    end program p
    

    (披露:我为NAG工作。)

    我认为一个简单的替换不会把你带到那里,因为你必须处理延续行才能正确。我知道,
    vim
    中的语法高亮显示能够跳过区域内不需要的匹配(它甚至能够正确高亮显示像“\””这样的字符串,打开字符串文本中的拼写检查等等),因此似乎有足够的机制来解决您的问题。不过,利用这种机制可能很困难(我想不出一个快速的好方法:-()。我不认为一个简单的替换就能把你带到那里,因为你必须处理连续行才能正确。我知道
    vim
    中的语法高亮显示能够跳过区域内不需要的匹配(它甚至能够正确地高亮显示像“\”这样的字符串),打开字符串文本中的拼写检查等),因此似乎有足够的机制来解决您的问题。不过,利用这种机制可能很难(我想不出一个好办法:-()。非常感谢。我刚刚访问了推荐页面,我真正需要的是:%s/\%(^\%([^']*'[^']*')*)\@非常感谢。我刚刚访问了推荐页面,我真正需要的是:%s/\%(^\%([^']*'[^']*')*)\@很好的特性。我只希望fortran不需要这些东西,传统代码中的行长限制和大写让我发疯…很好的特性。我只希望fortran不需要这些东西,传统代码中的行长限制和大写让我发疯。。。