Visual Studio, 솔루션 별 들여 쓰기 설정


89

나는 몇 가지 다른 일을하고 있으며 일부는 탭을 사용하고 일부는 들여 쓰기에 2 개의 공백을 사용하고 다른 사용자는 들여 쓰기에 4 개의 공백을 사용합니다.

Visual Studio에서이를 설정하는 옵션은 도구-> 옵션-> 텍스트 편집기-> <언어>-> 탭에 있습니다.

솔루션 기반에서 이러한 설정을 재정의하는 방법이 있습니까?


14
파일별로 탭 / 들여 쓰기 스타일을 감지 할 수 있기를 바랍니다. 즉, 파일이 열리면 해당 파일에 대해 탭 / 들여 쓰기 스타일을 사용합니다. Sublime Text는 그것을합니다.
IsmailS

답변:


20

다음은 원하는 것을 달성하는 한 가지 방법입니다.

1) 들여 쓰기를 변경하는 매크로 만들기 ( 소스 )

 Sub Set-Indent(indent As integer)
     Dim props As EnvDTE.Properties = DTE.Properties("TextEditor", "C/C++")
     Dim ts As EnvDTE.Property = props.Item("TabSize")
     Dim ins As EnvDTE.Property = props.Item("IndentSize")
     ts.Value = indent 
     ins.Value = indent 
 End Sub

2) 솔루션로드와 연결 : 매크로 탐색기에서을 EnvironmentEvents선택 SolutionEvents하고 첫 번째 드롭 다운 Opened에서 두 번째 드롭 다운을 선택 합니다. 이제 솔루션을 열 때마다 트리거되는 매크로가 있습니다. 솔루션을 필요한 들여 쓰기에 매핑하기 만하면됩니다.


8
네,하지만 작동합니다. 감사. C #을 개발자들에 대한, 그것의 DTE.Properties ( "문서 편집기", "CSHARP")
마이크라고 Stockdale

2
이것을 하나의 솔루션에 넣으면 모든 솔루션에 넣어야합니다. 특히 공공 프로젝트에는 거의 사용할 수 없습니다. EditorConfig (아래의 다음 답변)가 더 나은 IMHO입니다.
rustyx

93

업데이트 : VS 2017은 기본적으로 EditorConfig를 지원합니다 : https://blogs.msdn.microsoft.com/dotnet/2016/12/15/code-style-configuration-in-the-vs2017-rc-update/

VS 2010 이상 에는 솔루션 / 프로젝트 루트의 .editorconfig 파일을 기반으로 들여 쓰기를 설정하는 확장이 있습니다 .

http://visualstudiogallery.msdn.microsoft.com/c8bccfe2-650c-4b42-bc5c-845e21f96328

Visual Studio Code에 대한 유사한 확장 도 있습니다 .


2
나는 이것을 좋아합니다-설정이 빠르며 다른 옵션과 동일한 속도 저하 문제가 없으며 필요한 경우 솔루션에서 개별 프로젝트의 설정을 변경할 수있는 추가 보너스가 있습니다. 에.
karaken12

@ondatra 파일을 내 솔루션 폴더 ( .sln파일 과 동시에)에 넣을 때 각 프로젝트 폴더에서만 작동하도록 할 수 없습니다 . 또한 지원 indent_brace_style합니까?
drzaus 2013

@ondatra indent_brace_style아직 지원하지 않는다는 사실을 발견했습니다 -나는 그것에 대한 문제열었 습니다.
drzaus

감사합니다. vs2012update3에 대해 github.com/editorconfig/editorconfig/issues/116 에서 0.4.0 업데이트를 사용해야 했습니다
SteelBytes

1
VS2017 v15.3은 이제 많은 코딩 스타일 속성을 지원 합니다 .
Frédéric


4

VS 확장 EditorConfig ( http://visualstudiogallery.msdn.microsoft.com/c8bccfe2-650c-4b42-bc5c-845e21f96328 ) 웹 사이트에서 :

EditorConfig 프로젝트는 들여 쓰기 크기와 같은 일반적인 텍스트 편집기 옵션을 구성하기위한 간단한 파일 형식을 정의 합니다 . 이러한 구성 파일은 프로젝트의 소스 코드와 함께 배치되도록 설계되어 텍스트 편집기가 파일별로 올바른 옵션을 사용할 수 있도록합니다. EditorConfig 프로젝트는 여러 일반 텍스트 편집 기용 플러그인을 제공하여 형식을 완전히 교차 플랫폼으로 만듭니다.

(강조 광산)

전체 공개 : ReSharper가 인수했기 때문에 개인적으로 테스트 할 수 없었습니다.


2

VS2017 RC는 .editorconfig 형식에 대한 지원을 추가했습니다.


5
예,하지만 완성 된 파일의 예는 좋을 것입니다. :)
toddmo


0

업데이트 : Resharper에서 들여 쓰기가 관리되지 않는 것처럼 보이 므로이 답변은 실제로 특정 질문을 해결하지 않습니다. 그러나 일반 용어로 적용됩니다. 즉 "Visual Studio, 솔루션 별 설정" 을 찾는 사람이 여기에서 우연히 발견되는 경우를 대비하여.


Resharper 를 사용 하는 경우 솔루션에 대해서만 서식 설정 (실제로 모든 설정)을 저장할 수 있습니다. 자신만을위한 것인지 (즉, 소스 제어에 전념하지 않음) 또는 공유 솔루션 별 설정 (즉, 소스 제어에 전념)을 추가로 지정할 수 있습니다.

Resharper > Options > Code Editing > C# (or whatever language) > Formatting Style > Braces Layout

그런 다음 창 하단의 Save To"Solution XYZ personal"(또는 목적에 따라 공유)을 선택합니다.

다음 YOURSOLUTION.sln.DotSettings.user과 같은 값을 가진 xml 파일이 생성 됩니다.

<s:String x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/ANONYMOUS_METHOD_DECLARATION_BRACES/@EntryValue">NEXT_LINE</s:String>
<s:String x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/CASE_BLOCK_BRACES/@EntryValue">NEXT_LINE</s:String>

Resharper 설정-솔루션 전용으로 저장


1
들여 쓰기를 2 칸 또는 4 칸으로 설정하는 데 사용되는 resharper 설정은 무엇입니까?
앤디 Tjahjono

VS 설정 인 @EndyTjahjono : 도구> 옵션> 텍스트 편집기> (언어)> 탭> "탭 크기"또는 "들여 쓰기 크기". VS2012의 좋은 점은 빠른 실행 검색 ( CTRL+Q)을 사용하고 "Tabs"를 입력하여 사용 가능한 모든 언어 설정으로 바로 이동할 수 있다는 것입니다.
drzaus

하지만 그 VS 설정은 글로벌 (솔루션 / 프로젝트 별이 아님)이며 솔루션 / 프로젝트 별 설정이 있기 때문에 resharper를 사용하도록 제안 했습니까?
앤디 Tjahjono

당신은 저를 얻었습니다. 저는 resharper에서 다른 설정을 변경하는 중이었기 때문에 들여 쓰기도 관리 할 것이라고 생각했습니다. 탭 설정을 위해 resharper를 다시 살펴 봤지만 찾을 수 없었습니다. 따라서주의 할 점은 "들여 쓰기 크기와 같이 resharper가 관리하지 않는 설정을 제외한 거의 모든 설정"입니다. 나는 대답을 업데이트 할 것이다. 충분한주의를 기울이지 않았기 때문에 자유롭게 반대표를 던질 것이다.
drzaus

업데이트 해주셔서 감사합니다. 참고로 나는 당신을 고치려고하지 않았지만 실제로 resharper가 프로젝트마다 들여 쓰기 설정을 갖기를 바라고 있었고 그것을 설정할 장소를 찾지 못했습니다.
앤디 Tjahjono

0

그래서, 받아 들여진 솔루션은 "당신은 당신의 솔루션을 필요한 들여 쓰기에 매핑하기 만하면됩니다"라고 말합니다. 어떻게 하는지를 제외하고는 훌륭합니다. 그것을 알아 내기 위해 많은 시간을 낭비한 후 여기서 선호하는 방법을 찾았 습니다 . 이 방법은 모든 솔루션에 대해 다를 수있는 내 보낸 설정을 원하는만큼로드합니다. 설정에는 들여 쓰기부터 색상 또는 창 레이아웃까지 모든 것이 포함될 수 있습니다 (제 생각에).

  • Visual Studio 2008에서 도구> 매크로> 매크로 탐색기를 엽니 다.
  • MyMacros> Module1을 두 번 클릭합니다 (Module1이없는 경우 MyMacros를 마우스 오른쪽 단추로 클릭하고 '새 모듈 ...'을 선택하여 만듭니다).
  • 매크로 탐색기 창에서 왼쪽의 'EnvironmentEvents'를 두 번 클릭합니다.
  • 왼쪽 상단 드롭 다운에서 'SolutionEvents'를 선택합니다.
  • 오른쪽 상단 드롭 다운에서 '열림'을 선택합니다.
  • SolutionEvents.Opened 이벤트를 처리하는 코드가 자동으로 추가됩니다. 해당 코드를 다음과 같이 변경하십시오.

    Private Sub SolutionEvents_Opened() Handles SolutionEvents.Opened
        Dim item As ProjectItem = DTE.Solution.FindProjectItem("solution.vssettings")
        If Not item Is Nothing Then
            'MsgBox("Uncomment this to see a message when settings are loaded")
            Dim name = item.FileNames(1)
            DTE.ExecuteCommand("Tools.ImportandExportSettings", "/import:""" & name & """")
        End If
    End Sub
    
  • 매크로를 저장하십시오.

  • 도구> 옵션을 사용하여 UI를 변경하여 탭 설정 및 기타 원하는 항목을 설정할 수 있습니다.
  • 도구> 설정 가져 오기 및 내보내기 ...> 선택한 환경 설정 내보내기> 다음
  • 탭 설정을 내보내려면 '모든 설정'을 선택 취소 한 다음 옵션> 텍스트 편집기> C / C ++를 선택하십시오.
  • 다음을 클릭 한 다음 '설정 파일의 이름을 지정 하시겠습니까?'로 'solution.vssettings'를 입력합니다. 해당 설정을 사용하려는 솔루션이있는 곳에 파일을 저장합니다.
  • solution.vssettings를 솔루션 탐색기 창의 원하는 위치로 끕니다.
  • Visual Studio를 종료하고 다음에 solution.vssettings가 포함 된 솔루션을 열면 해당 설정을로드해야합니다.

매크로가 실행되지 않으면 MS 보안 패치 때문일 수 있습니다. 을 바탕으로 다음 문자열을 추가 :

<AllowDComReflection enabled="true"/>

다음 세 파일의 <runtime> 태그 아래 :

"C:\Program Files (x86)\Common Files\Microsoft Shared\VSA\9.0\VsaEnv\vsmsvr.exe.config"
"C:\Program Files (x86)\Common Files\Microsoft Shared\VSA\9.0\VsaEnv\vsaenv.exe.config"
"C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\IDE\devenv.exe.config"

관리자 권한으로 해당 파일을 편집하는 데 사용하는 편집기를 시작해야합니다 (예 : 메모장을 마우스 오른쪽 단추로 클릭하고 '관리자 권한으로 실행'선택).

또한 위에서 제안한 매크로와 동일한 작업을 수행해야하는 플러그인 을 찾았 지만 어떤 이유로 설치 프로그램을 실행 한 후에는 아무 작업도 수행하지 않았습니다.


0

clang-format은 소스 코드 형식을 지정하기위한 매우 정교한 옵션을 제공합니다.

Visual Studio 플러그인은 아주 초보적입니다. 즉, 자동으로 실행되지는 않지만 작업을 잘 수행합니다 (수동으로 호출 할 때).

http://llvm.org/builds/

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.