posted by dalnimbest 2014. 1. 27. 11:06





'이미지 파일을 읽어와서 쉘에 붙여 넣는것

Public Sub GetPic()

    Dim aWB         As Excel.Workbook

    Dim aSht        As Excel.Worksheet

    Dim aRng        As Excel.Range

    Dim rngA        As Excel.Range

    Dim rng8       As Excel.Range

    Dim aShp        As Excel.Shape

    Dim isImgExist  As String

    Dim bmpName     As String

    Dim pathName    As String

    Dim nSize       As Integer


    On Error GoTo hErr:

    

    Set aSht = ActiveSheet

'   Set rngA = aSht.Range("기준열")

    Set rngA = aSht.Range("B4")

    Set rngA = aSht.Range(rngA, rngA.End(xlDown))

'   pathName = "경로"

    pathName = "d:\민용헌\GEN3\SYMBOL_130821\LOGO\"

    

'   nSize = 이미지 사이즈(pixel단위)

    nSize = 32

    For Each aRng In rngA

'       Set rng8 = aRng.Offset(기준열로부터의 오프셋)

        Set rng8 = aRng.Offset(0, 5)

        imgname = aRng.Value

'       imgname = imgname & ".이미지 확장자"

        imgname = imgname & ".png"

        

        isImgExist = Dir(pathName & imgname)

        If (isImgExist <> "") Then

            aSht.Pictures.Insert(pathName & imgname).Select

            Selection.ShapeRange.Left = (rng8.Width - nSize) / 2 + rng8.Left

            Selection.ShapeRange.Top = (rng8.Height - nSize) / 2 + rng8.Top

            

            Selection.ShapeRange.PictureFormat.TransparentBackground = True

            Selection.ShapeRange.PictureFormat.TransparencyColor = RGB(255, 0, 255)

  

        End If

   

   Next

    

    MsgBox "Complete"

   

   Exit Sub


hErr:

'   예외처리

    Resume

End Sub



'PSD의 파일을 읽어서 PPT로 붙히는것
Option Explicit

Private Sub btnConvert_Click()
    
    Dim phtApp  As Photoshop.Application
    Dim phtDoc  As Photoshop.Document
    Dim phtSet  As Photoshop.LayerSet
    Dim phtLay  As Photoshop.ArtLayer
    Dim bmpSaveOpt As Photoshop.BMPSaveOptions ' 포토샵 저장 설정 Flag
        
    Dim pptApp As PowerPoint.Application
    Dim pptPrs As PowerPoint.Presentation
    Dim pptView  As PowerPoint.View
    Dim pptSlide As PowerPoint.Slide
    Dim pptRange As PowerPoint.SlideRange
            
    Dim shtBase As Excel.Worksheet
    Dim rngProg As Excel.Range
           
    Dim fsoRef, dirRef, f As Object
    Dim strScrPath As String
    Dim strResPath As String
    Dim strSetName As String
    Dim strLayName As String
    Dim strBmpPath As String
        
    '포토샵 Application개체 생성
    Set phtApp = CreateObject("Photoshop.Application")
    Set bmpSaveOpt = New BMPSaveOptions
    
    phtApp.DisplayDialogs = psDisplayNoDialogs ' for PsDialogModes 1 (psDisplayAllDialogs), 2 (psDisplayErrorDialogs), 3 (psDisplayNoDialogs
    bmpSaveOpt.Depth = psBMP_X1R5G5B5
    
    
    
    bmpSaveOpt.OSType = psWindows
    
    
    '포토샵이 설치되지 않으면 포토샵개체를 만들수없다는 에러 발생(429)하므로
    '에러 발생시 메시지와 함께 종료합니다.
    If Err = 429 Then
        MsgBox "포토샵이 제대로 설치되지 않았습니다.", vbCritical
        Exit Sub
    End If
    
    On Error GoTo hErr '이 아래코드부터 에러가 발생하면 hErr레이블(끝부분)로 이동합니다.
    
    Set shtBase = ActiveWorkbook.Worksheets("변환")
    
 
    shtBase.Range("A1:B65535").Clear
    Set rngProg = shtBase.Range("A1")
        
    rngProg.Value = "작업 시작"
    Set rngProg = rngProg.Offset(1, 0)
    
    strScrPath = shtBase.Range("E3").Value
    strResPath = shtBase.Range("E4").Value
    
    Set fsoRef = CreateObject("Scripting.FileSystemObject")
    Set dirRef = fsoRef.GetFolder(strScrPath)
      
    
'&& 파워포인트 활성화 &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
    Set pptApp = New PowerPoint.Application
    pptApp.Visible = msoTrue
    Set pptPrs = pptApp.Presentations.Add
    
    
    For Each f In dirRef.Files
        
        DoEvents
        
        rngProg.Value = f.Name
        rngProg.Offset(0, 1).Value = "진행중"
        
        Set phtDoc = phtApp.Open(f.Path)
        
        
        For Each phtSet In phtDoc.LayerSets
            
            DoEvents
            
            strSetName = phtSet.Name
            
            If strSetName = "화살표" Then
            
                phtSet.Visible = True
                
                For Each phtLay In phtSet.Layers
                    
                    DoEvents
                    
                    If Right(phtLay.Name, 2) = "AI" Then
                                                
                        phtLay.Visible = True
                        
                    Else
                    
                        phtLay.Visible = False
                    
                    End If
                    
                Next
            
            ElseIf Left(strSetName, 2) = "주간" Then
                
                phtSet.Visible = True
                
                For Each phtLay In phtSet.Layers
                    
                    phtLay.Visible = True
                
                Next
                
            ElseIf Left(strSetName, 2) = "메인" Then
                
                phtSet.Visible = True
                
                For Each phtLay In phtSet.Layers
                
                    If phtLay.Name = "도로면검정" Then
                                                               
                        phtLay.Visible = False
                    
                    Else
                    
                        phtLay.Visible = True
                    
                    End If
                
                Next
                
            Else
            
                phtSet.Visible = False
        
            End If
        
        Next
        
        strBmpPath = strResPath & Right(phtDoc.Name, InStr(phtDoc.Name, "_"))
        strBmpPath = Replace(strBmpPath, ".psd", ".bmp")
              
     
        phtApp.ActiveDocument.SaveAs strBmpPath, bmpSaveOpt, True, psLowercase
                       
    '&& 파워포인트에 사진 추가
        Dim shpRange As Object
        Dim txtRange As Object
        Dim picRange As Object
                        
        
        Set pptSlide = pptPrs.Slides.Add(1, ppLayoutBlank)
        
               
        Set picRange = pptSlide.Shapes.AddPicture(Filename:=strBmpPath, LinkToFile:=msoFalse, SaveWithDocument:=msoTrue, Left:=90, Top:=68, Width:=540, Height:=405)
        
        
        Set shpRange = pptSlide.Shapes.AddLabel(msoTextOrientationHorizontal, 70.75, 15, 14.5, 36#)

        shpRange.TextFrame.WordWrap = msoFalse

        Set txtRange = shpRange.TextFrame.TextRange.Characters(Start:=1, Length:=0)

        With txtRange
            .Text = phtDoc.Name
            With .Font
                .NameAscii = "굴림"
                .NameFarEast = "굴림"
                .NameOther = "Times New Roman"
                .Size = 24
                .Bold = msoFalse
                .Italic = msoFalse
                .Underline = msoFalse
                .Shadow = msoFalse
                .Emboss = msoFalse
                .BaselineOffset = 0
                .AutoRotateNumbers = msoTrue
                .Color.SchemeColor = ppForeground

            End With

        End With
        
        
        
        
'    ActiveWindow.Selection.SlideRange.Shapes.AddLabel(msoTextOrientationHorizontal, 70.75, 1.625, 14.5, 36#).Select
'    ActiveWindow.Selection.ShapeRange.TextFrame.WordWrap = msoFalse
'    ActiveWindow.Selection.ShapeRange.TextFrame.TextRange.Characters(Start:=1, Length:=0).Select
'    With ActiveWindow.Selection.TextRange
'        .Text = "tjsaudrl"
'        With .Font
'            .NameAscii = "굴림"
'            .NameFarEast = "굴림"
'            .NameOther = "Times New Roman"
'            .Size = 24
'            .Bold = msoFalse
'            .Italic = msoFalse
'            .Underline = msoFalse
'            .Shadow = msoFalse
'            .Emboss = msoFalse
'            .BaselineOffset = 0
'            .AutoRotateNumbers = msoTrue
'            .Color.SchemeColor = ppForeground
'        End With
'    End With
'    ActiveWindow.Selection.ShapeRange.Select

'    ActiveWindow.Selection.SlideRange.Shapes.AddPicture(FileName:="C:\Documents and Settings\Administrator\My Documents\My Pictures\1001.jpg", LinkToFile:=msoFalse, SaveWithDocument:=msoTrue, Left:=174, Top:=139, Width:=372, Height:=263).Select
    
        phtDoc.Close (psDoNotSaveChanges)
        
        rngProg.Offset(0, 1).Value = "완  료"
                   
        Set rngProg = rngProg.Offset(1, 0)
    Next
    
    
    pptPrs.SaveAs strResPath & "사진3D확인용.ppt"
    
    MsgBox "작업종료"
       
    Exit Sub
    
hErr: '에러가 발생하면 이쪽으로 옵니다
    MsgBox Err.Description, vbCritical, "에러발생"
    Resume Next
        
End Sub



'통계내는것

Option Explicit


Public Sub 중분류_요약()

    

    Dim shtOne    As Excel.Worksheet

    Dim shtTwo    As Excel.Worksheet

    Dim rngOne    As Excel.Range

    Dim rngTwo    As Excel.Range

    Dim rngAll    As Excel.Range

    Dim rngEnd    As Excel.Range

    Dim rngDat    As Excel.Range

    Dim rngSun    As Excel.Range

    Dim strName   As String

    Dim strSheet  As String

    Dim strFomula As String

    Dim n         As String

    Dim b         As String

    Dim e         As String

    

    

    On Error GoTo hErr

        

    Set shtOne = ActiveWorkbook.Worksheets("명칭")

    Set shtTwo = ActiveWorkbook.Worksheets("명칭_중분류")

    

    shtTwo.Range("D3").Value = Format(Now, "yyyy-mm-dd")

        

    Set rngOne = shtOne.Range("B5")

    Set rngTwo = shtTwo.Range("C10")

    Set rngEnd = rngOne.End(xlDown)

    Set rngAll = shtOne.Range(rngOne, rngOne.End(xlDown))

    

    

    rngOne = Application.ConvertFormula(rngOne.Formula, xlA1, xlA1, xlRelative)

    strSheet = "명칭"

    

    For Each rngOne In rngAll

        DoEvents

        

        If strName = "" Then

        

            strName = rngOne.Text

            Set rngSun = rngOne

            

        End If

    

        

        If rngOne.Text <> strName Then

            

            shtTwo.Activate

            n = rngTwo.Row

            b = rngSun.Row

            e = rngOne.Offset(-1, 0).Row

            

            ' 건수 OLD

            strFomula = FormatString("=SUM($s!G$s:G$s)", strSheet, b, e)

            strFomula = Replace(strFomula, "'", """")

            Set rngDat = rngTwo.Offset(0, 3)

            rngDat.Formula = strFomula

            

            ' 건수 NEW

            strFomula = FormatString("=SUM($s!H$s:H$s)", strSheet, b, e)

            strFomula = Replace(strFomula, "'", """")

            Set rngDat = rngTwo.Offset(0, 4)

            rngDat.Formula = strFomula

            

            strName = rngOne.Text

            

            Set rngTwo = rngTwo.Offset(1, 0)

            Set rngSun = rngOne.Offset(0, 0)

            

            

        End If

        

        If rngOne.Address = rngEnd.Address Then

        

            shtTwo.Activate

            n = rngTwo.Row

            b = rngSun.Row

            e = rngOne.Offset(-1, 0).Row

            

            

            strFomula = FormatString("=SUM($s!G$s:G$s)", strSheet, b, e)

            strFomula = Replace(strFomula, "'", """")

            Set rngDat = rngTwo.Offset(0, 3)

            rngDat.Formula = strFomula

            

            ' 건수 NEW

            strFomula = FormatString("=SUM($s!H$s:H$s)", strSheet, b, e)

            strFomula = Replace(strFomula, "'", """")

            Set rngDat = rngTwo.Offset(0, 4)

            rngDat.Formula = strFomula

        

        End If

        

  

    Next

    

    Exit Sub

    

hErr:

    MsgBox "중분류 요약 에러" & Err.Description

    

End Sub



Public Sub 대분류_요약()

    

    Dim shtOne    As Excel.Worksheet

    Dim shtTwo    As Excel.Worksheet

    Dim rngOne    As Excel.Range

    Dim rngTwo    As Excel.Range

    Dim rngDat    As Excel.Range

    Dim rngAll    As Excel.Range

    Dim rngEnd    As Excel.Range

    Dim rngSun    As Excel.Range

    Dim strName   As String

    Dim strSheet  As String

    Dim strFomula As String

    Dim n         As String

    Dim b         As String

    Dim e         As String

    

    

    On Error GoTo hErr

        

    Set shtOne = ActiveWorkbook.Worksheets("명칭_중분류")

    Set shtTwo = ActiveWorkbook.Worksheets("명칭_대분류")

    

    shtTwo.Range("D3").Value = Format(Now, "yyyy-mm-dd")

           

    Set rngOne = shtOne.Range("B10")

    Set rngTwo = shtTwo.Range("B10")

    Set rngEnd = rngOne.End(xlDown)

    Set rngAll = shtOne.Range(rngOne, rngOne.End(xlDown))

    

    rngOne = Application.ConvertFormula(rngOne.Formula, xlA1, xlA1, xlRelative)

    strSheet = "명칭_중분류"

    

    For Each rngOne In rngAll

        DoEvents

        

        If strName = "" Then

        

            strName = rngOne.Text

            Set rngSun = rngOne

            

        End If

    

        

        If rngOne.Text <> strName Then

            

            shtTwo.Activate

            n = rngTwo.Row

            b = rngSun.Row

            e = rngOne.Offset(-1, 0).Row

            

            ' 건수 OLD

            strFomula = FormatString("=SUM($s!F$s:F$s)", strSheet, b, e)

            strFomula = Replace(strFomula, "'", """")

            Set rngDat = rngTwo.Offset(0, 4)

            rngDat.Formula = strFomula

            

            ' 건수 NEW

            strFomula = FormatString("=SUM($s!G$s:G$s)", strSheet, b, e)

            strFomula = Replace(strFomula, "'", """")

            Set rngDat = rngTwo.Offset(0, 5)

            rngDat.Formula = strFomula

            

            

            

            strName = rngOne.Text

            

            Set rngTwo = rngTwo.Offset(1, 0)

            Set rngSun = rngOne.Offset(0, 0)

            

        End If

        

        If rngOne.Address = rngEnd.Address Then

        

            shtTwo.Activate

            n = rngTwo.Row

            b = rngSun.Row

            e = rngOne.Offset(-1, 0).Row

            

            ' 건수 OLD

            strFomula = FormatString("=SUM($s!F$s:F$s)", strSheet, b, e)

            strFomula = Replace(strFomula, "'", """")

            Set rngDat = rngTwo.Offset(0, 4)

            rngDat.Formula = strFomula

            

            ' 건수 NEW

            strFomula = FormatString("=SUM($s!G$s:G$s)", strSheet, b, e)

            strFomula = Replace(strFomula, "'", """")

            Set rngDat = rngTwo.Offset(0, 5)

            rngDat.Formula = strFomula

        

        End If

  

    Next

      

    Exit Sub

    

hErr:

    MsgBox "대분류 요약 에러" & Err.Description

    


End Sub



Public Function FormatString(ByVal src As String, ParamArray mRepStr())

    ' #VBIDEUtils#************************************************************

    ' *

    ' * Procedure Name   : printf

    ' * Parameters       :

    ' *                    ByVal src As String

    ' *                    ParamArray mRepStr()

    ' * *******************************************************************

    ' * Comments         : $VBCR -> vbcrlf 으로 대체

    ' *                    $VBTAB -> vbTabl으로 대체

    ' *

    ' * *******************************************************************

    Dim s                As Variant

    src = Replace(src, "$VBCR", vbCrLf)

    src = Replace(src, "$VBTAB", vbTab)

    For Each s In mRepStr

        src = Replace(src, "$s", s, , 1, vbTextCompare)

    Next

    FormatString = src

End Function



posted by dalnimbest 2014. 1. 4. 12:14

 

명령어모드에서 실행해야한다. 현재 모드가 뭔지 모르겠으면 일단 <esc>키를 두번 치고 시작한다.

 

/pattern pattern에 해당되는 문자를 찾아 커서를 이동한다.

 

 

:s/pattern1/pattern2 현재줄에서 pattern1에 해당되는 문자열을 찾아 pattern2로 치환해 준다. (처음 만나는 pettern1, 전체에 대해서 적용할려면 g를 붙인다. ) :s/pattern1/pattern2/g)

 

:%s/pattern1/pattern2 현재 파일내에서 pattern1에 해당되는 문자열을 찾아 pattern2로 치환해 준다.

:1-5s/pattern1/pattern2 현재 파일의 1~5줄 내에서 pattern1에 해당되는 문자열을 찾아 pattern2로 치환해 준다.

 

* <>로 둘러싸여있는거 다 없애기
:%s/\(<.\{-}>\)//g

*:
문서에
: fsfd[sgsdgsgsg]sfdfdf
:
저런 식으로 여럿 있습니다.
:
저기서 [ ] 사이의 모든 글을 지우고 싶습니다.
:
즉 위의 글을 fsfd[]sfdfdf 로 만들고 싶은데요.
:
잘 안되네요.
:
제 생각엔 :%s;[.*];[];g
:
저렇게 하면 될 것 같았는데 안돼네요.
:
아시는분 좀 갈챠주시길...
:
그럼 좋은 주말 보내셈~~


:%s/\[.*\]/\[\]/g
:%s/\[[^\]]*\]/\[\]/g
:help regular

* ct(
(
를 만나기 전까지 치환한다.
(
대신 다른것을 써도 된다.
)cta
a
를 만나기 전까지 치환한다.
c2ta
두번째 a를 만나기 전까지 치환한다.

*
두번째 스페이스까지만 남기고 뒷줄은 없애는것
:%s/^\(\(.\{-} \)\{2}\).*/\1/g

*
: cuit:x28
: xyzhero:x30ix
: xero:x18_lk
를 다음과 같이 바꿀려면, 즉 숫자뒤의 문자들을 없애는것
: cuit:x28
: xyzhero:x30
: xero:x18

%s/\D*$

* 1234,
김형달
에서 맨첨의 , ;로 바꾸기

:%s/,/;

*
여러 빈줄을 한 빈줄로 바꿈
:g/^$/.,/./-j

*
한글만 없애는것

*
숫자만 빼고 나머지는 다지우기
:%s/\D//g

*
맨앞의 #만 없애는것
:5,$s/\(^.*\)\(#\)/\1
맨처음의 것(뭐가 되든지)을 찾고 그다음 #을 찾고 맨처음의 것만 남긴다.

*
copy d:\0423\100\na029w d:\0424\na029w
copy d:\0423\100\na030w d:\0424\na030w
에서 맨마지막 \다음을 가져오는것

:%s/.*\\//

*
한줄을 ""로 감싸는것
:%s/.*/"&"/g

*
여러개의 공백을 한개의 공백으로 바꾸기
:%s/ \+/ /g

"
부분을 없애고
:%s/"//g

줄맨앞의 공백도 없애준다.
:%s/^\s*//g

줄맨뒤의 공백도 없애준다.
:%s/\s*$

*
화일전체를 대문자로 바꾸는것
:%s/.*/\U&/g
&
는 패턴찾기에서 나온 전부를 가리킨다.


유니코드로 찾기
/[\u숫자]

'Computer > vi에디터' 카테고리의 다른 글

커서 이동, 입력, 삭제  (0) 2014.01.04
posted by dalnimbest 2014. 1. 4. 11:31

숫자 + 이동키 : 숫자만큼 이동한다. 예를 들어 h는 왼쪽으로 1칸이동하는 명령어인데 3h는 왼쪽으로 3칸 이동한다.


<이동키>

+ 다음 라인의 첫 문자로 이동 

- 위 라인의 첫 문자로 이동 


^ 현재 있는 라인에서 맨 앞의 첫 문자로 이동 (공백이 아닌 문자)

0 현재 있는 라인에서 맨 앞의 첫 문자로 이동 (공백이라도 상관 없음)

$ 현재 있는 라인에서 맨 뒤의 마지막 문자로 이동 (공백이라도 상관없음)

그럼 공백이 아닌 맨마지막으로 이동하는것은?


Ctrl+f   한 화면 아래로

Ctrl+b   한 화면 위로

Ctrl+d   반 화면 아래로

Ctrl+u   반 화면 위로

Ctrl+l  현재의 화면을 다시 나타냅니다.


50% 문서에서 중간(50%)에 해당하는곳으로 이동(단 화면 맨 아래를 기준으로 한다. 커서가 화면 아래에 있지 않을때는 내가 간 %랑 화면이 다르다고 느낄수 있다.)

gg 제일 처음 라인의 맨 앞의 첫 문자로 이동 (빈줄이라도 상관없음) 

G 제일 마지막 라인의 맨 앞의 첫 문자로 이동 (빈줄이라도 상관없음)

그럼 빈줄이 아닌곳으로 이동하는것은?


'' 이전위치로 이동 (한번)

ctrl + o 이전위치로 이동 (누적)

ctrl + i 현재위치로 돌아오기 (누적)



zt 현재커서의 위치에 해당되는 문장을 화면의 맨위로 이동

z + Enter 현재커서의 위치에 해당되는 문장을 화면의 맨위로 이동(커서를 해당문장의 맨앞으로 옮긴다.)

z.  현재커서의 위치에 해당되는 문장을 화면의 가운데로 이동 (커서를 해당문장의 맨앞으로 옮긴다.)

zz 현재커서의 위치에 해당되는 문장을 화면의 가운데로 이동 

z- 현재커서의 위치에 해당되는 문장을 화면의 맨아래로 이동 (커서를 해당문장의 맨앞으로 옮긴다.)

zb 현재커서의 위치에 해당되는 문장을 화면의 맨아래로 이동 


ctrl + e 화면을 한줄씩 위로 올린다. (반대는 ctrl + y라고 하는데... 잘안되네...)



H   커서의 위치를 화면 맨위로

M  커서의 위치를 화면 가운데로

L   커서의 위치를 화면 맨아래로


gd 함수정의부분으로 이동(함수가 쓰인곳에서 쓴다.) 참고로 함수가 쓰인곳에 [i 를 누르면 함수의 프로토 타입을 볼수 있다.


[[ 함수의 첫부분으로 간다. (반복해서 누르면 위에 있는 함수의 첫부분으로 간다.)

]] 다음함수의 첫부분으로 간다. (반복해서 누르면 아래에 있는 함수의 첫부분으로 간다.)


% 매칭되는 기호를 찾아간다. 괄호등


* 커서가 위치한 단어를 찾아간다(아래로)

# 커서가 위치한 단어를 찾아간다(위로)


현재위치 마크(책갈피)하기

mx m을 누르고 a-z중 하나를 누르면 현재 위치가 마트된다.

'x '를 누르고 마크한것중 하나(a-z)를 누르면 그 마크한대로 이동한다. (맨앞줄로)

`x `를 누르고 마크한것중 하나(a-z)를 누르면 그 마크한대로 이동한다. (마크할때 커서가 있던 위치로)


<입력키>


i 현재 커서 위치에 입력 

I 현재 라인의 첫 문자 앞에 입력(공백이 아닌 문자)


a 현재 커서 위치의 오른쪽에 입력 

A 현재 라인의 마지막에 입력 (공백이라도 상관 없음)


o 현재 라인의 아래 라인을 입력 가능한 공백 라인으로 만듦 

O 현재 라인의 위 라인을 입력 가능한 공백 라인으로 만듦 



<삭제키>


x 현재 커서의 위치에 있는 1 문자 삭제 

X 현재 커서의 앞에 있는 1 문자 삭제 

dw 현재 커서의 위치부터 단어 끝까지 삭제 

db 현재 커서의 위치부터 단어 처음까지 삭제 

dd 현재 커서가 위치해 있는 1 라인 삭제 

D 현재 커서의 위치부터 라인의 끝까지 삭제 

그럼 커서의 위치로부터 라인의 시작까지 삭제는?


dG 현재 라인부터 파일의 마지막 라인까지 삭제  




<복사, 이동, 치환>

yw 현재 커서가 위치한 단어를 복사 

yy 현재 커서가 위치한 라인을 복사 


p 현재 커서의 오른쪽 또는 아래 라인에 복사한 내용을 입력 

P 현재 커서의 왼쪽 또는 위 라인에 복사한 내용을 입력 


J 현재 라인과 다음 라인을 연결 

r 현재 커서가 위치한 1 문자 치환 

R 현재 커서 위치부터 <Esc>키를 칠 때까지 문자 치환 


cw 현재 커서 위치의 단어를 다른 단어로 치환 

C 현재 커서의 위치부터 그 라인의 마지막까지 치환 


cc 현재 커서가 위치한 라인을 다른 내용으로 치환 

~ 현재 커서 위치의 1 문자를 소문자, 대문자로 치환 



'Computer > vi에디터' 카테고리의 다른 글

검색 및 치환  (0) 2014.01.04
posted by dalnimbest 2014. 1. 2. 00:25

선택한 영역을 캡쳐후 클립보드에 저장 : shift + control + command + 4


선택한 영역을 캡쳐후 파일로 저장 : shift + command + 4


전체 화면을 캡쳐후 클립보드에 저장 : shift + control + command + 3


전체 화면을 캡쳐후 파일로 저장 : shift + command + 3

'Computer > Mac' 카테고리의 다른 글

맥북 프로가 심하게 느릴때  (3) 2013.06.29
posted by dalnimbest 2013. 12. 9. 09:06

Outlook에서 메일을 메일서버에서 메시지 복사본을 남겨두면 웹에서 메일을 보고싶을때 볼수가 있다. 


절차는 아래와 같다.

(OS는 Win7이고 Outlook버전은 2007이다.)


1. 메뉴 - 도구 - 계정설정을 선택




2. 전자메일탭 - 변경(A) 선택



3. 기타 설정(M) 선택



4. 고급 탭 - 서버에 메시지 복사본 저장(체크) - 다음 기간후에 서버에서 제거 (체크후 원하는 날짜 를 기입한다.)


posted by dalnimbest 2013. 12. 3. 14:48

PPT를 개별 실행창으로 띄우기 위해서는 아래 DLL을 다운받아서


c:\Program Files\Microsoft Office\Office12\PPCORE.DLL  에 덮혀씌우면 된다.

(참고로 필자의 OS는 Window 7이고, Office는 2007버전이다.)


PPCORE.DLL


posted by dalnimbest 2013. 6. 29. 00:12

결론 : Shift + Control + Option + 전원을 눌러서 맥북이 꺼지면 다시 전원을 넣어서 켜보면 된다.


2011 early버전의 Mac Book Pro를 사용하며 iPhone프로그램을 개발하다가 어느순간 맥북이 심하게 느려졌다. 왜그럴까 하며 고민하다가 그냥 사용하였는데... 점점 느려지더니 어느순간 사용을 못할만큼 느려졌다.


또 블루투스로 연결된 키보드와 마우스도 사용하기 힘들만큼 느려지더니 맥북에 있는 키보드를 사용해서 타이핑을 해도 짜증이 날만큼 느려졌다.


활성상태에서 메모리의 여유 공간을 보니 거의 10MB수준이 에서 머물고 있었다. 메모리 부족으로 인해서 느려진것인가 하고 생각해서 4GB인 메모리를 8GB로 업그레이드 하였다.


<업그레이드 이후의 메모리 상태>


충분한 여유공간이 확보되었으니 이제는 쾌적한 속도를 맛볼수 있을까 생각하고 XCode를 열고 작업을 하는데... 웬걸... 차이가 전혀 없었다... 메모리는 4~5GB의 여유공간을 확보하고 있는데도 느리다니 도저히 이해할수 가 없었다.


도저히 안되겠다 싶어서 HDD를 포맷하고 OS를 Mountain Lion으로 다시 설치하고 XCode만 설치하였는데 여전히 느린것이었다.


HDD를 SSD로 바꾸면 상당한 속도향상을 맛볼수 있다는 말을 많이 들어서 SSD로 바꿀려고 하다가 맥에 대해서 좀 아는 회사직원들의 충고가 OS를 다시 설치하였는데도 느리면 이건 하드웨어의 문제가 아닌것 같다고 애플 서비스 센터에 가보라고 하였다.


그래서 애플서비스 센터에 가서 보니 HDD와 본체를 연결하는 케이블이 조금 구부러져 있었다. 케이블이 원인이 될지도 모른다고 하면서 지금은 케이블이 없고 일단 맡기고 가면 확인후 연락을 주겠다고 하였다.


이틀후 연락이 왔는데 이상이 없다고 하였다. 그런데 배터리가 완전히 갔다고 한다. 혹시 전원케이블을 빼면 맥북이 그냥 꺼진다고 한다. 교체비용은 20만원정도라고 한다... 나는 그냥 집에서 사용할것이기 때문에 전원케이블을 연결해서 사용하기 때문에 교체하지 않는다고 말했다.(나중에 서핑을 해보니 상시전원을 사용하면  kernal_task의 CPU 점유율이 올라가는데 영향을 미치는것 같다.)


가서 확인하니 사파리를 띄우는데 한번 클릭하니 그냥 사파리가 뜨는것이 었다. 이게 말로만 듣던 "AS기사의 법칙(동작이 제대로 안되다가도 AS기사에게 보이면 멀쩡하게 잘되는 현상)"인가 하며 실망을 하면서도 어쨋든 빨라졌으니 됬다 싶어서 집으로 가져왔다. 참고로 케이블 교체시에는 공임4만원에 케이블 약 4만원 총 8만원정도의 비용이 지출될뻔 했지만 아무것도 한것이 없으니 그냥 가라고 하더라... 애플 더럽게 비싸다... 잡스만 아니었으면 애플 안쓰는건데... 쩝....


그런데 집에와서 XCODE로 작업을 하다보니 여전히 심하게 느렸다.


도저히 못 참겠다 싶어서 iMac으로 바꿀려고도 했지만 느린 원인을 찾지 못하면 iMac을 구입해도 똑같은 증상이 나타나면 어쩌겠나 싶어서 다시 회사로 맥북을 가지고 가서 회사직원의 도움을 받아서 꼼꼼히 살펴보았다.


그런데 이 직원이 활성상태보기에서 모든 프로세스 보기로 하면서 여러가지 테스트를 하는데 프로세스중 "kernal_task"가 어느순간 CPU점유율이 500%를 넘어가는것이었다.

("나의 프로세스"로 선택되어 있으면 kernal_task가 안보이므로 "모든 프로세스"로 바꾸어 주어야 kernal_task가 보인다.)


<비정상적인 상태의 kernal_task의 cpu점유율 607.3%정도나 차지한다.>



<정상적인 상태의 kernal_task의 cpu점유율. 현재는 3.5%정도만 차지한다.>



재연을 해보니 XCode에서 타이핑을 조금 하다보면 갑자기 CPU점유율이 500, 600%까지 확 올라가는것이었다.


아무것도 안하고 좀 지나면 kernal_task의 CPU점유율이 확 떨어지는데 다시 아무 작업을 하다보면 또 CPU점유율이 확 올라가는것이 었다.


원인을 찾았으니 구글링을 좀 해보았는데 전부 이런 현상에 대해서만 얘기를 할뿐 제대로 해결했다는것을 찾지 못하였다. (맥북의 발열이 심할때 kernal_task의 CPU점유율이 심하게 올라가는것 같다.)


하다하다 찾은것이 아래 블로그다.

http://macnews.tistory.com/742


SMC(System Management Controller)

SMC는 맥북에서 전원부분과 각종 외부장치를 관리하는 칩으로 이것을 초기화한는 방법이 적혀 있는 블로그이다.


앞에서 언급했듯이 내 맥북프로는 배터리가 완전히 고장이 나 있는 상태인지라 SMC를 초기화 해볼려고 마음을 먹었다. 참고로 나는 배터리와 메인보드연결하는 케이블을 떼 놓고 쓰고 있다.


나는 맥북프로라서 배터리를 탈착할수 있는 타입으로 보고 위 블로그대로 해볼려고 했는데 이놈의 맥북은 배터리를 탈착할수 없게 사람인자의 모양의 나사로 배터리를 부착해두었는것이 아닌가.


또다시 화가 치밀어 오르며 일자 드라이버로 사람인자 모양의 나사를 풀려다가 나사 머리만 망가지고 말았다. 비록 조금만 망가진것이었지만...


자포자기 하는 심정으로 배터리를 탈착할수 없는 맥북모델에서 하는 방법을 사용해 보았다.


shift+control+option+전원버튼을 누르니 확 화면이 꺼져버렸다.


그냥 다시 전원을 켜고 아무 기대도 없이 XCode에서 열심히 타이핑을 해보았는데 kernal_task의 CPU점유율이 거의 변동을 하지 않는것이 아닌가!!!


믿을수가 없어서 몇분동안이나 무작위 타이핑을 해보았다. 평소 같으면 한 10초만 타이핑을 연속으로 해도 kernal_task의 CPU점유율이 확 올라갔는데 아무런 변동도 없다...


블루투스로 연결된 마우스와 키보드를 사용해보았는데 아무런 delay도 없이 잘된다.(그런데 이건 무선랜과 간섭일 가능성도 있다. 생각해보니 무선랜을 바꾸고나서 블루투스의 딜레이가 심해진것 같다.)


<삼성 SSD 840 Pro를 새로 구입하고 나서 속도를 재본것... kernal_task가 문제일때...이건 HDD인가 SSD인가...>



<삼성 SSD 840 Pro의 속도... kernal_task에 문제가 없었을때.... 날라다닌다...>

완전히 해결된지 아닌지는 모르겠지만 어쨌던 지금은 아무런 문제도 없다.


다시 정리하면


2011 Mac Book Pro (early version)의 kernal_tas가 CPU를 심하게 차지해서 맥북이 너무느려지면 그냥  Shift + Control + Option + 전원을 눌러서 맥북이 꺼지면 다시 전원을 넣어서 켜보면 된다.



'Computer > Mac' 카테고리의 다른 글

화면캡쳐 단축키  (0) 2014.01.02