일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
- 광명동굴
- FMD식단
- 카메라번역
- 알약
- ios16기능
- 브라질리언왁싱 50일차
- 데이트
- 식단
- 애플워치울트라
- 남자 브라질리언왁싱
- ios16호환기기목록
- FMD
- 차세대카플레이
- 윈도우10
- 안전모드
- 가족여행
- 맥북구매주의사항
- 광명데이트
- 광명
- 면허취득과정
- 저렴하게폰바꾸기
- 도서관
- 애플이벤트정리
- 다이어트
- 애플 누끼따기
- 운전면허
- 애플워치시리즈8
- 도로주행시험꿀팁
- 성지주의사항
- ios16 업데이트
- Today
- Total
Hoslim의 라이프
Vim/YouCompleteMe 설치 오류 본문
Vim를 처음 접해보고 사용하는 걸 배우는 사람들에게 가장 매력적인 부분은 Vim를 자신만의 것으로 커스텀하고
맞춤 정장처럼 자신의 코딩 패턴에 알맞게 바꿀 수 있다는 것입니다. 이걸 가능케 하는 것이 Vim의 플러그인입니다.
많은 블로그에서 플러그인에 대한 글을 보면 각자만의 셋팅이 있고 각각 다르다는 것을 볼 수 있습니다.
하지만 사람들마다 커스텀해도 필수적으로 쓰는 플러그인들이 몇몇 있는데, YouCompleteMe(일명 YCM)
역시 많은 사람들이 사용하고 Vim의 불편함을 없애주는 대표적인 플러그인입니다.
Vim 플러그인 추천 사이트 (https://vimawesome.com/)
제가 YCM을 설치할 때 겪은 오류는 YCM server shutdown입니다.
이 오류에 대해 구글링해보면 주로 YCM wiki(ycm 위키에서 server shutdown에 대해)와 ycm 파일 내 README를 참고하라는 조언들이 많습니다. 하지만 마냥 읽어보면 꽤 많은 정보들이 있어서 또 다시 구글링을 하게 되는게 제가 3일간 고민하여 고친 경험을 바탕으로 정리하고자 이 글을 씁니다.
0. 이 글을 읽기 전 고려할 사항
1. .ycm_extra_conf.py의 문제
2. .vimrc의 설정 문제
0. 이 글을 읽기 전 고려할 사항
아마 이 글을 읽으신 분들은 이 오류때문에 많은 노력을 하시는 걸로 알지만 이 글이 처음 접하신 분들을 위한 사항들입니다.
일단 brew를 통해 ycm를 설치하신 분들은 brew를 업데이트 먼저 해보시고, python의 버전을 확인해서 다시 깔아주시기 바랍니다.
그리고 특히 오래된 글을 통해 ycm를 설치하신 분들은 최신 버전의 ycm 파일을 가져와서 설치해보시길 바랍니다.
(ycm github: https://github.com/ycm-core/YouCompleteMe)
cf) 최신버전으로 유지하기
cd ~/.vim/bundle/YouCompleteMe //ycm가 설치된 디렉으로
git pull --recurse-submodules origin master //ycm github에서 최신버전 pull
./install.py -all
1. .ycm_extra_con.py의 문제
제가 이 문제로 인해 ycm를 쓰지 못하게 된 경우였습니다. 구글링을 통해 알맞은 설정을 했음에도 계속 애궂은 에러 메세지만 났는데,
이외로 간단한 방법으로 해결했습니다. 아마 구글링을 통해 이 파일의 Flags를 고친 경우나 이 파일의 헤더를 건드리게 되면 대부분 문제를 해결하게 되는데 수정을 해도 안된다면 기존에 쓰던 에디터로 ycm_extra_con.py를 열어보는 걸 추천한다.
아마 이 파일을 에디터로 열면 수정된 부분에
이런 모습으로 수정된 부분을 적용한 것인지에 대한 확인을 다시 한다. 이 설정을 놓친다면 완전하게 적용이 되지 않은 것으로 해결이 되지 않은 것이다.
cf) 위 설정에 대한 부과 설정
1. Accept Current Change -> 헤드 부분을 적용
2. Accept Incoming Change -> 변경된 부분을 적용(병합 대상이 된 브랜치의 내용으로 변경)
3. Accept Both Change -> 둘다 적용 (말그대로 헤드와 변경된 부분 둘다 남겨준다.)
4. Compare Change -> 컨플릭트가 난 부분을 좀 더 보기쉽게 보여준다.
# This file is NOT licensed under the GPLv3, which is the license for the rest
# of YouCompleteMe.
#
# Here's the license text for this file:
#
# This is free and unencumbered software released into the public domain.
#
# Anyone is free to copy, modify, publish, use, compile, sell, or
# distribute this software, either in source code form or as a compiled
# binary, for any purpose, commercial or non-commercial, and by any
# means.
#
# In jurisdictions that recognize copyright laws, the author or authors
# of this software dedicate any and all copyright interest in the
# software to the public domain. We make this dedication for the benefit
# of the public at large and to the detriment of our heirs and
# successors. We intend this dedication to be an overt act of
# relinquishment in perpetuity of all present and future rights to this
# software under copyright law.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
# IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
# OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
# OTHER DEALINGS IN THE SOFTWARE.
#
# For more information, please refer to <http://unlicense.org/>
import os.path as p
import subprocess
import os
import ycm_core
DIR_OF_THIS_SCRIPT = p.abspath( p.dirname( __file__ ) )
DIR_OF_THIRD_PARTY = p.join( DIR_OF_THIS_SCRIPT, 'third_party' )
flags = [
'-Wall',
'-Wextra',
'-Werror',
'-Wc++98-compat',
'-Wno-long-long',
'-Wno-variadic-macros',
'-fexceptions',
'-DNDEBUG',
'-std=c99',
# ...and the same thing goes for the magic -x option which specifies the
# language that the files to be compiled are written in. This is mostly
# relevant for c++ headers.
# For a C project, you would set this to 'c' instead of 'c++'.
'-x', #I don't know if I need remove -x
'c',
'-isystem',
'../llvm/include',
'-isystem',
'../llvm/tools/clang/include',
'-I./driver',
'-I./debug',
'-I./include',
]
SOURCE_EXTENSIONS = [ '.cpp', '.cxx', '.cc', '.c', ]
def FlagsForFile( filename, **kwargs ):
return {
'flags': flags,
'do_cache': True
}
def Settings( **kwargs ):
return {
'flags': [ '-x', 'c', '-Wall', '-Wextra', '-Werror' ],
}
def GetStandardLibraryIndexInSysPath( sys_path ):
for index, path in enumerate( sys_path ):
if p.isfile( p.join( path, 'os.py' ) ):
return index
raise RuntimeError( 'Could not find standard library path in Python path.' )
def PythonSysPath( **kwargs ):
sys_path = kwargs[ 'sys_path' ]
dependencies = [ p.join( DIR_OF_THIS_SCRIPT, 'python' ),
p.join( DIR_OF_THIRD_PARTY, 'requests-futures' ),
p.join( DIR_OF_THIRD_PARTY, 'ycmd' ),
p.join( DIR_OF_THIRD_PARTY, 'requests_deps', 'idna' ),
p.join( DIR_OF_THIRD_PARTY, 'requests_deps', 'chardet' ),
p.join( DIR_OF_THIRD_PARTY,
'requests_deps',
'urllib3',
'src' ),
p.join( DIR_OF_THIRD_PARTY, 'requests_deps', 'certifi' ),
p.join( DIR_OF_THIRD_PARTY, 'requests_deps', 'requests' ) ]
# The concurrent.futures module is part of the standard library on Python 3.
interpreter_path = kwargs[ 'interpreter_path' ]
major_version = int( subprocess.check_output( [
interpreter_path, '-c', 'import sys; print( sys.version_info[ 0 ] )' ]
).rstrip().decode( 'utf8' ) )
if major_version == 2:
dependencies.append( p.join( DIR_OF_THIRD_PARTY, 'pythonfutures' ) )
sys_path[ 0:0 ] = dependencies
sys_path.insert( GetStandardLibraryIndexInSysPath( sys_path ) + 1,
p.join( DIR_OF_THIRD_PARTY, 'python-future', 'src' ) )
return sys_path
2. .vimrc에 대한 문제
이 문제는 vimrc에 있는 설정에서 잘못된 코드가 적혀있거나 아예 수정을 하지 않은 경우라고 생각한다.
let g:ycm_clangd_binary_path="/data/data/com.termux/files/usr/bin/clangd"
let g:ycm_global_ycm_extra_conf = //가독성을 위한 공백
'~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/.ycm_extra_conf.py'
let delimitMate_expand_cr=1
이 줄을 추가해서 :PlugUpdate를 통해 설정해보고 안된다면 다른 부분에서 문제가 생긴거라 보면 될 것이다.
그리고 고려할 부분은 사용자가 사용하는 언어이다. ycm 위키를 보면 언어별 설정 방법이 일일이 나와있다. 자신이 많이 사용하는 언어에 맞춰서 일일이 설정해야 한다.
필자는 다행히 이 선에서 문제를 해결했다. 이 오류를 해결하기 위해 그리고 이 글을 작성하기 위해 ycm server shut down으로 구글링을 해보니 정말 많은 오류와 실수들이 많이 보였다. 이 블로그까지 오신 분들도 자신의 오류를 알맞은 구글링을 통해 잘 해결해서 vim과의 우정이 유지되길 바란다!
** 혹시 다른 오류가 있거나 해봐도 잘 안된다면 댓글로 적어주세요. 같이 고민하고 공부합시다!
'오류 및 버그 모음' 카테고리의 다른 글
[알약 오류] 알약 랜섬웨어 진단 오류 (0) | 2022.08.30 |
---|