반응형

다른 건 몰라도, Git 에 기본으로 연결된 편집기랑 비교 병합 툴은 정말 거지 같다.

너무 불편하다.

 

그래서 대개가 외부 툴을 끌어다 쓴느데, 

그 중에 perforce 중 일부인 p4merge를 연동하는 방법이다. 찾는데 좀 애먹었다.

# configure git
git config --global diff.tool p4merge
git config --global difftool.p4merge.path /Applications/p4merge.app/Contents/Resources/launchp4merge
git config --global difftool.prompt false
git config --global merge.tool p4merge
git config --global mergetool.p4merge.path /Applications/p4merge.app/Contents/Resources/launchp4merge
git config --global mergetool.prompt false

# disable unwanted orig files
git config --global mergetool.keepBackup false

# test
git difftool HEAD^ HEAD

 

 

p4merge는 아래에서 받으면 된다.

https://www.perforce.com/products/helix-core-apps/merge-diff-tool-p4merge

 

Diff Tools and P4 Merge | Perforce Software

P4 Merge for Perforce P4 (formerly Helix Core) tracks and compares the effects of past and pending work for branches and individual files. This free side-by-side file comparison tool is used and loved by developers and designers to visualize merges, obtain

www.perforce.com

 

회사에서도 쓰는 툴이라서 익숙하고, 아무리 생각해도 이것만큼 편한 건 흔치 않다.

반응형
반응형

Git 이란

분산형 VCS 중의 하나이다.

요새는 ai  한테 물어보면 아주 자세하게 설명해준다.

 

아래는 Perplexity의 답변이다.

Git은 소프트웨어 개발에서 코드와 파일의 변경 이력을 효과적으로 추적하고 관리할 수 있도록 도와주는 **분산형 버전 관리 시스템(Distributed Version Control System, DVCS)**입니다. 즉, 여러 명의 개발자가 동시에 하나의 프로젝트에서 작업할 때, 각자의 변경 사항을 기록하고, 필요할 때 언제든지 과거의 특정 시점으로 되돌릴 수 있게 해주는 도구입니다.
Git의 주요 특징
• 분산 구조: 모든 사용자가 자신의 컴퓨터에 전체 프로젝트의 이력을 저장하므로, 중앙 서버에 문제가 생겨도 각자의 로컬 저장소로 복구가 가능합니다.
• 버전 관리: 파일의 변경 이력을 시간순으로 기록하여, 이전 버전으로 쉽게 되돌릴 수 있습니다. 예를 들어, 실수로 코드를 잘못 수정했을 때도 과거 상태로 복구할 수 있습니다.
• 브랜치와 병합: 여러 명이 동시에 각자의 브랜치에서 독립적으로 작업하고, 나중에 변경 사항을 하나로 합칠 수 있습니다. 이를 통해 실험적 기능 개발이나 협업이 용이해집니다.
• 협업 지원: 원격 저장소(예: GitHub, GitLab 등)를 통해 여러 개발자가 동시에 작업하고, 변경 사항을 공유할 수 있습니다.

 

 

Git 을 직접 해볼 수 있는 곳

https://learngitbranching.js.org/?locale=ko

 

Learn Git Branching

An interactive Git visualization tool to educate and challenge!

learngitbranching.js.org

 

정말 직관적으로 Git 이 동작하는 걸 볼 수 있다.

반응형
반응형

VS Code의 기본 폰트가 영 보기 싫었다.

너무 굵다... 눈이 피곤했다.

다들 많이 쓴다는 D2Coding도 내 눈에는 영 마음에 들지 않았다.
그러다가 눈에 띈 게 JetBrains Mono이다.

이름에서부터 알 수 있듯이, JetBrains에서 받을 수 있다.
https://www.jetbrains.com/lp/mono/

 

JetBrains Mono: A free and open source typeface for developers

Try JetBrains Mono in your IDE. Its simple forms and attention to every detail make coding a nice experience for developers’ eyes, no matter which IDE you choose.

www.jetbrains.com

 

글꼴 설치하기

다운로드한 파일을 풀고, 안에 내용 중에 ttf폴더를 찾아서 들어간 다음, 거기 있는 모든 ttf 파일을 설치해 준다.

 

설치 방법은 여러 가지다

  • 그냥 저 파일들은 전부 선택한 다음 더블클릭하기
  • 서체 관리자를 실행해서 모두 드래그 앤 드롭하기
  • 서체 관리자의 파일->현재 사용자에 서체 추가를 선택하고, 글꼴이 들어있는 폴더의 ttf 파일들을 선택하기

정상 설치되면, 이렇게 서체 관리자에서 볼 수 있다.

 

VS Code(Visual Studio Code)에 글꼴 설정하기.

VS Code는 아무리 봐도, 설정이 쉽지가 않다.

* 설정 들어가기.

CMD + SHIFT + P 를 누르고 "기본 설정 열기 ui" 또는 "preference open ui" 라고 치면 나오는 것들 중에
아래와 같이 선택해서 설정으로 들어가자.

 

그러고 나서 나오는 UI 항목 중에 아래그림과 같이 Font Family를 찾아서 'JetBrains Mono'를 맨 앞에 추가한다.

 

이게 끝이다.
만약 제대로 적용이 안 되는 것 같으면, 리붓해 주면 된다. 

제대로 되면 나오는 이쁜 글꼴.

참고로 이 글꼴은 아래와 같은 Ligature를 지원한다.

 

 

아래 내용부터는 안 해도 그만, 해도 그만이지만, 알아두고 하는 것이 좋다.

글꼴 조정하기

위에서 설명한 글꼴 항목을 보면, 여러 조정항목들이 있고, 어떤 것들은 settings.json 에서 편집이라고 되어 있는데 이걸 클릭해서 글꼴의 굵기, 크기, Ligature 지원 등을 설정할 수 있다.

 

현재 나의 설정 참고하자

 

굵기가 "normal" 일때와 "200"일 때의 비교, 개인적으로 200인 게 더 좋다.(오른쪽)

반응형
반응형

VI를 쓰다보면 어떤 파일을 열면 줄의 맨끝에 ^M이 붙어있는 경우를 볼 수 있다.

이건 Windows와 Unix/Linux 계열에서 사용하는 개행문자가 다르기 때문이다.

* 개행문자(New line)
  Windows : \r\n
  Unix/Linux : \n

** \r 이문자는 Carriage Return 이라고 하면 <CR> 로 표현되기도 하며 ASCII Table에서도 찾을 수 있다.


단순히 저문자를 치환으로 없애주기만 하면 된다. 또는 Dos용으로 보게 바꾸어도 된다.


1. ^M 문자 바꾸기
 :%s/^M//g

^M문자는 Ctrl+v Enter 를 누르면 나온다.
(여담으로는  gVIM에서는 이럴 필요도 없는 것 같다.)

2. 모드 변경하기
 :set fileformat=dos

반응형
반응형
 
vi 편집기란?  
파일을 생성하거나 편집하는데 사용하는 프로그램을 에디터(editor)라고 합니다.
유닉스에서 사용하는 에디터 중 vi 에디터 텍스트 편집기로 가장 대표적인 프로그램은 vi 에디터 입니다. vi 편집기는 Visual Editor로서, 모든 유닉스 시스템에 있으며 따라서 vi 편집기를 사용할 수 있다는 것은 어떤 유닉스 시스템에서도 문서 작업을 할 수 있다는 것을 의미합니다.

예를 들어 전자우편을 작성하거나, 프로그램을 작성하는 일, 또는 기타문서를 작성할 때에 편집기는 필수적인 연장(tool)입니다.



- vi 에디터 구성과 방법  
vi는 입력 모드와 명령어 모드 그리고 라인 모드의 세 가지 형태로 구성되어 있습니다.입력모드는 일반적은 텍스트 에디터와 같이 원하는 문자를 입력할 수 있는 상태를 말하고, 명령어 모드는 입력한 내용을 편집하기 위해서 다양한 편집 관련 명령어를 사용 할 수 있는 상태를 의미 한다.

따라서 입력 모드에서는 문자의 입력만이 가능하며 문단의 재구성과 삽입, 삭제 등의 편집 기능은 오직 명령어 모드에서만 사용할 수 있습니다.

vi를 실행한 직후에는 명령어 모드에 위치하게 되며 i(insert)나 a(append), o(open)를 입력하게나 <Insert> 키를 이용해서 입력 모드로 전환할 수 있다.

입력 모드에서 명령어 모드로 복귀할 때는 <Esc>키만을 사용합니다.입력     모드로 전화 i 또는 a 또는 o 또는 <Inset> 명령어 모드로 전환 <Esc>vi는 입력 모드와 명령어 모드 이외에 라인 모드를 추가로 갖고 있는데, 이는 셸 명령어나 외부 프로그램들을 에디터의 내부에서 직접 실행 시킬 수 있는 모드입니다.

라인 모드는 vi의 본체인 ex가 실행되는 상테이므로 보다 원초적인 텍스트 조작이 가능해진다. 또한 라인 모드는 셸과 직접 연결되어 파이프를 구성하기 때문에 작업 중인텍스느에 대해서 다양한 작업을 연결시킬 수 있다.

다른 모드와는 달리 라인 모드는 화면의 마지막 줄에 라인 모드임을 알리는 콜론(:)과 함께 입력한 내용이 출력되어 진행 중인 내용을 확인을 할 수 있도록 되어 있다. 라인 모드는 명령어 모드에서만 전환될 수 있으며, 입력 모드에서 직접 라인 모드로 들어올 수 없다.

따라서 vi 에디터는 실행 직후에 위치한 명령어 모드에서 입력 모드 그리고 라인 모드의 세 가지 모드를 상호 전환시키면서 작업을 진행하는 방식으로 사용된다.

그림 삽입.

라인 모드에서 :을 먼저 입역한 뒤에 원하는 명령어를 입력하는 방식으로 vi 명령어 이외의 셸 명령어와 외부 명령어들을 실행시킬 수 있다.


1.시작    
vi file  vi를 시작하여 지정한 파일 편집  
vi -R file  읽기 전용(read- only) 편집기로서 vi를 시작하여 지정한 파일 편집
view file  읽기 전용(read- only) 편집기로서 vi를 시작하여 지정한 파일 편집  


2.종료    
:wq  데이터를 저장하고 종료  
:q!  데이터를 저장하지 않고 종료  


3. 디스플레이 제어하기    
^L  현재 화면을 다시 디스플레이하기  
:set number  내부 줄 번호 디스플레이  
:set nonumber  배부 줄 번호 디스플레이 않기  



4. 마지막으로 지운 것 복사하기    
p  마지막으로 지워진 것을 커서의 뒤/아래에 삽입  
P  마지막으로 지워진 것을 커서의 앞/위에 삽입  
xp  두 문자를 바꿈  
deep  두 단어를 바꿈  
ddp  두 줄을 바꿈  



5. 패턴 검색    
/rexp  지정된 정규 표현식에 대해 앞으로 이동  
/  이전의 패턴에 대해 앞으로 검색을 반복  
?rexp  지정된 정규 표현식에 대해 뒤로 이동  
?  이전의 패턴에 대해 뒤로 검색을 반복  
n  /나 ?명령에 대해 같은 방향으로 반복  
N  /나 ?명령에 대해 반대 방향으로 반복  


6. 약어의 사용    
:ab short long  short를 long에 대한 약어로 변경  
:ab  현재 약어 목록을 표시  
:una short  약어 short를 표시  


7. 줄 길이의 조정    
r<Return>  문자를 뉴라인으로 변경  
J  줄의 결합  
:set wm=n  오른쪽으로 n문자 위치에서 자동적으로 줄 나눔  

8. 커서 이동    
h<Left>  커서를 한 칸 왼쪽으로 이동  
j<Down>  커서를 한 줄 아래로 이동  
k<Up>  커서를 한 줄 위로 이동  
l<Right>  커서를 한 칸 오른쪽으로 이동  
<Backspace>  커서를 한 칸 왼쪽으로 이동  
<Space>  커서를 한 칸 오른쪽으로 이동  
-  커서를 이전 줄의 처음으로 이동  
+  커서를 다음 줄의 처음으로 이동  
<Return>  커서를 다음 줄의 처음으로 이동  
0  커서를 현재 줄의 맨 앞으로 이동  
$  커서를 현재 줄의 맨 끝으로 이동  
^  커서를 현재 줄의 첫글자(공백이나 탭이 아닌)로 이동  
w  커서를 다음 단어의 첫 글자로 이동  
e  커서를 다음 단어의 끝 글자로 이동  
b  커서를 이전 단어의 첫 글자로 이동  
W  w와 같음(문장 부호 무시)  
E  e와 같음(문장 부호 무시)  
B  b와 같음(문장 부호 무시)  
(  다음 문장의 처음으로 이동  
)  이전 문장의 처음으로 이동  
{  다음 문단의 처음으로 이동  
}  이전 문단의 처음으로 이동  
H  커서를 화면 맨 위로 이동  
M  커서를 중간으로 이동  
L  커서를 맨 아래로 이동  


9. 편집 버퍼를 통한 이동    
^F  한 화면 아래로 이동  
^B  한 화면 위로 이동  
n^F  n화면 아래로 이동  
n^B  n화면 위로 이동  
^D  반 화면 아래로 이동  
^U  반 화면 위로 이동  
n^D  n줄만큼 아래로 이동  
n^U  n줄만큼 위로 이동  


10. 셸 명령 실행    
:!command  vi를 중단하고 지정한 셸 명령을 실행  
:!!  vi를 중단하고 이전의 셸 명령을 실행  
:sh  vi를 중단하고 셸을 실행  
:!csh  vi를 중단하고 새로운 C-셸을 실행  



11. 패턴에 의한 치환    
:s/pattern/replace/  현재 줄의 치환  
:lines/pattern/replace/  지정한 줄의 치환  
:line,lines/pattern/replace/  지정한 범위의 치환  
:%s/pattern/replace/  모든 줄의 치환  


12. 데이터 읽기  
:liner file  file의 내용을 지정한 줄 다음에 삽입  
:r file  file의 내용을 현재의 줄 다음에 삽입  
:liner !command  command의 결과를 지정한 줄 다음에 삽입  
:r !command  command의 결과를 현재의 줄 다음에 삽입  
:r !look pattern  지정한 pattern으로 시작된 단어 삽입  


13. 정규 표현식을 사용하기 위한 특수 기호    
.
뉴라인을 제외한 모든 단일 문자와 대응

*
영 또는 그 이상의 선행 문자와 대응

^
줄의 시작과 대응

$
줄의 끝과 대응

\<
단어의 시작과 대응

\>
단어의 끝과 대응

[ ]
묶여진 문자중의 하나와 대응

[^ ]
묶여진 문자를 제외한 아무것하고나 대응

\
이어지는 기호를 문자 그대로 해석


14. 줄 번호    
nG  줄번호 n으로 건너뛰기  
1G  편집 버퍼의 첫 줄로 건너뛰기  
G  편집 버퍼의 마지막 줄로 건너뛰기  
:map g lG  g가 lG와 같도록 매크로 정의  

15. 삽입    
i  입력 모드로 전환, 커서 위치 앞에서 삽입  
a  입력 모드로 전환, 커서 위치 뒤에서 삽입  
I  입력 모드로 전환, 현재 줄의 앞에 삽입  
A  입력 모드로 전환, 현재 줄의 끝에 삽입  
o  입력 모드로 전환, 현재 줄의 아래에 전개  
O  입력 모드로 전환, 현재 줄의 위에 전개  

16. 편집하고 있는 파일을 바꾸기    
:e file  지정한 파일의 편집  
:e! file  지정한 파일의 편집, 자동 점검의 생략  

17. 내용 고치기    
r  단지 한 글자만 변경(입력 모드로 바뀌지 않음)  
R  입력하는 대로 겹쳐 써서 변경  
s  삽입에 의해 한 단어의 변경  
C  커서의 위치로부터 줄 끝까지 삽입에 의한 변경  
cc  전체 줄을 삽입에 의한 변경  
S  전체 줄을 삽입에 의한 변경  
cmove  커서부터 move까지 삽입에 의해 변경  
~  대,소문자 바꾸기  


18. 고치기의 취소 또는 반복    
u  편집 버퍼를 수정했던 마지막 명령을 취소  
U  현재 줄을 저장  
.  편집 버퍼를 수정했던 마지막 명령 반복  

19. 문자 삭제    
x  커서가 있는 문자 삭제  
X  커서의 왼쪽 문자 삭제  
D  커서부터 줄의 끝까지 삭제  
dd  현재 줄의 전체 삭제  
dmove  커서부터 move까지 삭제  
dG  커서부터 편집 버퍼의 끝까지 삭제  
d1G  커서부터 편집 버퍼의 맨 앞까지 삭제  
:lined  지정한 줄의 삭제  
:line, lined  지정한 범위의 삭제  

20. 여러 줄의 복사와 이동    
:linecotarget  지정한 줄을 복사하여 target 줄 밑에 삽입  
:line, linecotarget  지정한 범위를 복사하여 target 줄 밑에 삽입  
:linemtarget  지정한 줄로 이동하여 target 줄 밑에 삽입  
:line, linemtarget  지정한 범위로 이동하여target 줄 밑에 삽입  

21. 데이터를 처리하기 위한 셸 명령의 사용    
n!!command  n번 줄에서 command의 실행  
!move command  커서부터 move까지 command 실행  
!move fmt  커서부터 move까지 줄들을 형식 맞추기  

22. 데이터 저장하기  
:w  원래의 파일로 데이터를 저장  
:w file  지정한 파일로 데이터를 저장  
:w>> file  지정한 파일에 데이터를 추가  

반응형
반응형
내가 애용하는 VIM 에서 정규표현식을 사용하는 방법이다.

너무나도 강력한 에디터인 VIM이다..ㅎㅎ 알면 알수록

[범위]/s/[target pattern]/[replacing pattern]/[옵션] [카운트]


옵션
c : 치환전 확인
g : 글로벌 치환
p : 치환된 마지막 라인 출력

예제
:1,10s/yes/no/g 처음 10행 치환
:%s/[Hh]ello/Hi/gc 치환 확인 물음
:s/Fortran/\U&/ 3 다음 3행의 "Fortran"을 대문자로 치환
:g/^[0-9][0-9]*/s//Line &:/ 숫자가 있는 모든라인에 Line: 추가

----------------------
[vi] 파일 오가며 편집하기
----------------------
:e#

"f4yy → :w → :e other_file → "fp
:f 버퍼에 4라인 복사후 붙이기
"F6yy
:f 버퍼에 6라인 추가

반응형
반응형
나는 VIM을 쓴다. 편하니까. 안써본 사람들은 중독성 강한 이 프로그램을 잘 모른다..

최근에 파일 열다가 황당했다 완전 전부 깨지는 것이 아닌가.. UTF-8 때문이었다.

찾다 보니 VIM에서 바로 해결 가능한 좋은 방법이 있었다.

VIM을 실행한 상태에서 두 명령만 내리면 된다.

set tenc=korea
set enc=utf-8

역시 VIM은 좋다. ㅋㅋ
반응형
반응형
어디에선가 보고 나름대로 내가 쓰기 편하고 좋은 것들만 뽑아서 정리한 것들이다

다른 좋은 것들도 있지만 실상 잘 안써서..(뭐 사실 몰라서 못쓰는게 맞다, 방대한 기능을 활용못하는..ㅋㅋ)

이정도만~ 어쨌든 출처는 그리 자랑스럽지 못한 나의 개인 홈페이지다.

1번은 적당히 추가하고 나머진 파일 만들어서 1번 파일 있는데다 넣으면 끝.

http://eph.pe.kr/zboard/bbs/view.php?id=linux&page=1&sn1=&divpage=1&sn=off&ss=on&sc=on&select_arrange=headnum&desc=asc&no=40&PHPSESSID=fbfdf252c38bcdb05d845562a0d6340f
(참 길기도 하지..)

1번은 적당히 추가하고 나머진 파일 만들어서 1번 파일 있는데다 넣으면 끝.
1번은 원래 있는 파일이고 나머진 만든 파일이니 이름은 자기 마음대로~~

1. _vimrc

-----------------------------------------------------------------
"My Setting
source $VIMRUNTIME/../ephron_config.vim
source $VIMRUNTIME/../MyMapFunction.vim
source $VIMRUNTIME/../CustomFunction.vim
-----------------------------------------------------------------

2. ephron_config.vim
-----------------------------------------------------------------
set tags=./tags
set nu
set ci
set ai
set si

set sw=4
set ts=4
if has("gui_running")
        set lines=50
        set co=120
endif
"End of My Settings

"Customizing My Color Setting
colorscheme desert

"Customizing Plugin Setting
-----------------------------------------------------------------

3. CustomFunction.vim
-----------------------------------------------------------------
if version >= 500
func! GetTodayDate()
        exe "read !date/t|sed 's/-//g'"
endfunc
endif
-----------------------------------------------------------------

4. myMapFuction.vim
-----------------------------------------------------------------
map <F1> v]#ezf
map <F2> v]}zf
map <F3> zo
map <F9> a// EPHRON_<Esc>:call GetTodayDate()<CR> + kkkJxA
"map <F11> :25vs ./<CR>:set nonumber<CR>^Ww
map <F11> :WMToggle<cr>

"방향키 설정
-----------------------------------------------------------------

반응형

+ Recent posts