Altruistic Programmer's Blog (KR)

이타주의 프로그래머의 블로그

Archive for the ‘매크로’ tag

Visual Studio에서 gvim 띄우는 스크립트

with 3 comments

[옛날 블로그 글입니다. 2009.07.19]

비주얼 스튜디오용 매크로입니다. 기능은

  • 현재 편집중인 파일을 gvim에서 띄워준다.
  • 현재 편집중인 파일과 짝 파일( .h 혹은 .cpp)을 vs(Vertical Split)로 gvim에서 띄워준다.
  • 현재 편집중인 파일의 짝 파일을 비주얼 스튜디오에서 열어준다.

요새 비주일 스튜디오를 여러 개 띄울일이 많아서 봤더니 Visual AssistReshaper같은 플러그인들이 메모리를 엄청 먹고 있었습니다. 이 참에 정리하자는 생각으로 플러그인을 모두 지워버렸더니, 비주얼 스튜디오가 정말 가볍네요. 5개씩 띄워도 무리가 없습니다.

하지만 역시나 Visual Assist가 없어서 제일 아쉬운 것은 코드 하이라이팅과 h/cpp 전환하기 기능. 코드 하이라이팅은 포기, h/cpp 전환 기능은 아래 매크로로 대체했습니다.

그리고 vim도 가끔 써주면 즐거워집니다. vim에서 편집하고나서 다시 비주얼 스튜디오에 반영해 주는 기능은 없습니다. -_-;; 비주얼 스튜디오가 알아서 바뀐 파일 로딩해주니 크게 문제는 없구요.

아래 함수 중에서 Public으로 된 녀석들에 단축키를 설정해서 쓰시면 좋습니다.

  • EditActiveDocumentWithGVIM
  • EditCoupleFilesWithGVIM
  • OpenMyCoupleFile

아, 안에 보시면 gvim 경로같은 거 하드코딩 되어 있으니 잘 고쳐서 쓰세요. 음. 그리고 설치하는 것은 비주얼 스튜디오에서 매크로 탐색기 여시고, 기본 모듈하나 더블클릭하시면 매크로 편집기(IDE)가 뜨는데요, 거기에 붙여 넣으시면 될 겁니다. -_-;; 뭐 어떻게든 될거에요 ㅎㅎ

소스코드

Imports System
Imports EnvDTE
Imports EnvDTE80
Imports EnvDTE90
Imports System.Diagnostics

Public Module muscly
    Private Function FindFileItem(ByVal fileName As String, ByVal collection As ProjectItems) As ProjectItem
        For Each item As ProjectItem In collection
            If item.ProjectItems.Count > 0 Then
                Dim projItem = FindFileItem(fileName, item.ProjectItems)
                If Not projItem Is Nothing Then
                    Return projItem
                End If
            ElseIf item.Name = fileName Then
                Return item
            End If
        Next

        Return Nothing
    End Function
    Private Function GetCoupleFileName(ByVal fileName As String) As String
        'If cpp
        If fileName.ToLower.EndsWith(“cpp”) Or fileName.ToLower.EndsWith(“inl”) Then
            Return fileName.Substring(0, fileName.Length – 3) + “h”
        ElseIf fileName.ToLower.EndsWith(“h”) Then
            ' Try with cpp
            Dim firstTarget = fileName.Substring(0, fileName.Length – 1) + “cpp”
            If Not FindFileItem(firstTarget, DTE.ActiveDocument.ProjectItem.ContainingProject.ProjectItems) Is Nothing Then
                Return firstTarget
            Else
                ' return inl
                Return fileName.Substring(0, fileName.Length – 1) + “inl”
            End If
        End If
    End Function
    Private Function GetFullPathFromFileName(ByVal fileName As String) As String
        Dim projItem As ProjectItem = FindFileItem(fileName, DTE.ActiveDocument.ProjectItem.ContainingProject.ProjectItems)
        Dim a = projItem.Properties.Item(“FullPath”)
        Return projItem.Properties.Item(“FullPath”).Value
    End Function
    Public Sub OpenMyCoupleFile()
        On Error Resume Next

        'Get File Name
        Dim Name As String = DTE.ActiveDocument().Name

        Dim coupleFileName = GetCoupleFileName(Name)
        DTE.ExecuteCommand(“File.OpenFile”, coupleFileName)
    End Sub

    Public Sub EditCoupleFilesWithGVIM()
        Dim curFilePath = DTE.ActiveDocument.FullName

        Dim coupleFileName = GetCoupleFileName(DTE.ActiveDocument().Name)
        Dim coupleFilePath = GetFullPathFromFileName(coupleFileName)

        Dim windowSizeCommand = “-c “”set columns=180″” -c “”set lines=60″”"
        Dim splitCommand = “-c “”vs ” + coupleFilePath + “”"”

        Dim proc = New System.Diagnostics.Process
        proc.StartInfo.FileName = “c:\\Program Files\\Vim\\vim71\\gvim.exe”
        proc.StartInfo.Arguments = curFilePath + ” ” + windowSizeCommand + ” ” + splitCommand
        proc.Start()

    End Sub
    Public Sub EditActiveDocumentWithGVIM()
        'Get File Name
        Dim fullName As String = DTE.ActiveDocument().FullName

        Dim proc = New System.Diagnostics.Process
        proc.StartInfo.FileName = “c:\\Program Files\\Vim\\vim71\\gvim.exe”
        proc.StartInfo.Arguments = fullName
        proc.Start()
    End Sub

End Module

광고 – blog.altprog.com

도메인 또 바꿨습니다. -_-;;
muscly.net 은 계약 기간 끝나면 서비스 종료됩니다~

Written by muscly

July 19th, 2009 at 3:15 pm

__VA_ARGS__

without comments

[옛날 블로그 글입니다. 2009.05.21]

C++에서 매크로 함수를 만들때 가변 인자(…)를 받을 수 있는 매크로입니다. C99에서 추가되었다고 하는데, GCC CPP에서는 예전부터도 다른 식으로 방법을 제공하고 있었다네요. MSVC는 2005버전부터 지원한다고 합니다. 간단한 사용예는,

#define printError( format, … ) \
    sprintf( stderr, format, __VA_ARGS__ )

지난 글의 __FUNCTION__ 매크로와 같이 쓰면 손쉽게 로깅 매크로를 만들 수 있습니다.

#define printError( format, … ) \
    sprintf( stderr, __FUNCTION__ ” ” format, __VA_ARGS__ )

위에꺼 블로그에서 그냥 쓴거라, 컴파일 안되면 말해주세요~ ㅎㅎ

Written by muscly

May 21st, 2009 at 12:38 pm