git가 3 방향 병합을 수행하고 충돌이있는 경우 해결할 수 없습니다. 파일의 해당 영역을 다음과 같이 표시합니다.

No unresolvable conflicts here <<<<<<< HEAD xyz ||||||| parent of ... abc ======= 123 >>>>>>> ... 

변경할 방법 (그리고 그렇다면 어떻게)이 있습니까? 이 세 “섹션”의 배경색 :

  • <<<<<<< HEAD ||||||| parent of ...
  • ||||||| parent of ... =======
  • >>>>>>> ...

(편집 : 다른 질문에 따라 특정 줄을 강조 할 수있는 방법이있는 경우 질문이 회전합니다. xyz는 일반적으로 강조 표시되지 않지만 <<<<<<<||||||| 강조 표시됩니다.)

다른 충돌 마커 세트도 처리 할 수 있습니까?

댓글 작성 당시 사용 가능한 최신 버전의 vim 사용. 그래서 지금은 8.1.1183입니다.

저는 단말기에 검은 색 배경과 256 색을 사용합니다. 가장 어두운 R / G / B / C / M / Y 색상을 사용하여이 섹션을 제공하는 것이 좋을 것이라고 생각했기 때문에 구문 강조에 많은 문제를 일으키지 않았습니다. (ANSI 색상 52, 22, 17, 23, 53, 58-1-6 색이 아닙니다.)

댓글

  • 간단한 Google 검색어로 충분합니다. github.com/rhysd/conflict-marker.vim
  • @klaus, 많은 작업을하면서 해당 플러그인을 살펴 보았다고 말 했어야했습니다. 이 플러그인은 충돌 마커 자체를 강조 표시합니다. ' 또한 다른 줄에서 해당 마커와 관련된 텍스트를 강조 표시하지 않습니다. 당면한 큰 문제는 ' 다른 줄에 따라 특정 줄을 강조 표시하는 방법입니다. 내 예에서는 xyz가 일반적으로 강조 표시되지 않지만 <<<<<<<||||||| 사이의 ' 강조 표시하고 싶습니다.

Answer

Vim 구성에서 다음을 수행 할 수 있습니다 ( 원하는 색상 및 스타일) :

function! ConflictsHighlight() abort syn region conflictStart start=/^<<<<<<< .*$/ end=/^\ze\(=======$\||||||||\)/ syn region conflictMiddle start=/^||||||| .*$/ end=/^\ze=======$/ syn region conflictEnd start=/^\(=======$\||||||| |\)/ end=/^>>>>>>> .*$/ highlight conflictStart ctermbg=red ctermfg=black highlight conflictMiddle ctermbg=blue ctermfg=black highlight conflictEnd ctermbg=green cterm=bold ctermfg=black endfunction augroup MyColors autocmd! autocmd BufEnter * call ConflictsHighlight() augroup END 

다음과 같이 렌더링 :

여기에 이미지 설명 입력

당신이 추구하는 것이 무엇입니까?

댓글

  • 그 '는 절대적으로 제가 ' m을 추구합니다. 저는 '하지만 vimscript에 약간의 이상한 점이 있습니다. 예제를 입력하면 게시 한 이미지와 똑같습니다. 예제를 저장하고 새 파일을 편집하는 vim을 다시 시작하면 끔찍하게 엉망이됩니다. (vim 8.1.1186.) 더 이상하게도, 이상하게 보이는 기존 파일의 모든 줄을 삭제하고 내용을 다시 붙여 넣으면 ' 여전히 잘못 표시됩니다. i.ibb.co/jvGMH6t/wtfvim.jpg
  • 실제 병합 시나리오에서 사용하면 이미지 I보다 더 이상한 색상이 트리거됩니다. 링크 됨 : conflictStart가 올바르게 강조 표시됨; conflictMiddle||||||| 부분은 빨간색으로 표시되지만 나머지 줄은 파란색으로 표시됩니다. 빨간색의 =======; 노란색의 >>>>>>> .* 줄 (노란색이 여기에 들어온 곳, 노란색이 없음); 그리고 ' 충돌의 일부가되어서는 안되는 나머지 파일은 녹색으로 표시되지만 여전히 conflictEnd에 따라 선택됩니다. stackoverflow.com/questions/30247603 SynStack() 함수
  • 마찬가지로 실제 병합 시나리오에서 내용을 새 파일에 복사 / 붙여 넣기하면 예상대로 표시되지만 ' 저장되고 vim이 다시 시작 되 자마자 잘못 표시됩니다.
  • 실제 병합 시나리오에서는 :diffoff를 사용하여 원래 diff 색상을 사용하지 않도록 설정하고 ' 파일 유형 만 남길 수 있습니다. 구문 강조. 첫 번째 경우를 확인하기 위해 약간 재생하겠습니다.
  • 죄송합니다. 글을 게시하기 전에 conflict_marker 플러그인을 설치 한 상태로 두었다는 사실을 잊었습니다. 충돌이 발생하여 문제가 발생했습니다. 이를 제거하면 더 이상 문제가 발생하지 않습니다.

답변

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다