Archive for the ‘매크로’ tag
Visual Studio에서 gvim 띄우는 스크립트
[옛날 블로그 글입니다. 2009.07.19]
비주얼 스튜디오용 매크로입니다. 기능은
- 현재 편집중인 파일을 gvim에서 띄워준다.
- 현재 편집중인 파일과 짝 파일( .h 혹은 .cpp)을 vs(Vertical Split)로 gvim에서 띄워준다.
- 현재 편집중인 파일의 짝 파일을 비주얼 스튜디오에서 열어준다.
요새 비주일 스튜디오를 여러 개 띄울일이 많아서 봤더니 Visual Assist나 Reshaper같은 플러그인들이 메모리를 엄청 먹고 있었습니다. 이 참에 정리하자는 생각으로 플러그인을 모두 지워버렸더니, 비주얼 스튜디오가 정말 가볍네요. 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 은 계약 기간 끝나면 서비스 종료됩니다~
__VA_ARGS__
[옛날 블로그 글입니다. 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__ )
위에꺼 블로그에서 그냥 쓴거라, 컴파일 안되면 말해주세요~ ㅎㅎ