들여 쓰기를위한 탭, 정렬을위한 공간


17

vim을 탭으로 들여 쓰기하고 공백과 맞추려고하지만 실제로 vim은 탭으로 들여 쓰기하고 탭 + 공백으로 정렬을 채 웁니다.

Vim이합니다 :

여기에 이미지 설명을 입력하십시오

(각 블록은 탭입니다)

{
>--long a = 1,
>-->--..b = 2,
>-->--..c = 3;
}

할 수 있습니다 :

{
>--long a = 1,
>--.....b = 2,
>--.....c = 3;
}

따라서 탭과 공백의 주제에 대해 많은 질문이 있다고 생각하지만 Just Works 솔루션을 제공하는 것은 없습니다.

실제로 나는 사용하고있다 :

set ai
set cindent
set cinoptions=(0,:0,u0,U0,g0)

나는 잘 작동하는 것 같은 Smart Tab 플러그인을 시도했지만 시도 할 때 gg=G이상한 오류가 발생합니다.

Error detected while processing function CtabRedoIndent..<SNR>12_CheckAlign:
line   11:
E108: No such variable: "b:ctab_lastalign"
Press ENTER or type command to continue
Error detected while processing function CtabRedoIndent:
line   10:
E170: Missing :endwhile

이 토론은 예전의 것처럼 보였으므로 이제는 2015 년에 대처할 공식적인 해결책이 있습니까?



나는 이것에 대한 매핑을 가지고 있지 않습니다. 아이디어 ...하지만 탭 키를 누를 때 Vim이 원하는 너비의 탭을 삽입하도록 설정했지만 Shift를 입력하면 실제로 공백으로 탭을 확장하면 어떻게됩니까? -탭? 그런 정렬이 간단하지 않습니까?
와일드 카드

(PS : xkcd comic 의 "Religious Wars"포럼 에서 "Tabs vs. Spaces" 에 대한 멋진 토론이 있습니다 . 즐기십시오;)
Wildcard

답변:


3

이 작업을 자동으로 수행하는 것은 어렵습니다. Vim은 "들여 쓰기"와 "정렬"이 무엇인지 모른다. 어떤 사람들은 들여 쓰기와 정렬이 정확히 무엇인지에 동의하지 않을 수 있습니다.

그 존재는 말했다 스마트 탭 플러그인이 당신이 원하는 것을 할 수 있도록 설계되었습니다; C 파일에서는 합리적으로 잘 작동하지만 몇 가지주의 사항이 있습니다. 그것은 휴식 시간에 (어쨌든, 나를 위해) C 파일에 대한 일을 예를 들어, 파이썬 파일 및 예기치 않은 않습니다.
소스를 보면 실제로 5 분 안에 어떻게 작동하는지 알 수 없으며 일부 내용이 깨 졌다는 사실과 함께 신중하게 진행해야한다고 말해야합니다 ...


3

언급 한 Smart Tabs 플러그인은 성능이 우수합니다. 처음에는 동일한 오류가 발생하여 포기했지만 결국 수정하는 데 몇 분이 걸렸습니다. 다음 패치를 적용하십시오.

--- ctab.vim.orig   2016-08-11 17:05:20.767275274 +0800
+++ ctab.vim    2016-08-11 17:15:20.039286525 +0800
@@ -221,7 +221,7 @@
       if a:line == line('.')
         let b:ctab_lastalign=a:line
       else
-        unlet b:ctab_lastalign
+        unlet! b:ctab_lastalign
       endif
       set ts=50
       set sw=50

나는 나중에 누군가가 스마트 탭 위키 섹션 에서 비슷한 수정을 제안했다는 것을 발견했다 . 아아, 새로운 릴리스는 없었습니다.


0

vim의 들여 쓰기는 다음 스크립트를 사용하여 간단하게 수행됩니다.

단일 파일 들여 쓰기를 수행하는 스크립트

#!/bin/bash 
#Author: Ankit shah
#Enter file name to indent as argument
file=$1
vim $file -c "normal gg=G" -c "wq"
#Use expand command to turn tabs into spaces. Code uniform across different vim environment
expand -t 4 $file $file 

2
이것은 질문에 대한 답변이 아닙니다
Martin Tournoij
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.