2013-04-15 2 views
1

OpenCL 오류 코드에서 사람이 읽을 수있는 문자열로 변환하는 것을 발견했습니다. 50 개 정도 다른 코드는 다음과 같이 헤더 파일에 정의되어 있습니다 : 나는했습니다 때문에Linux/Vim을 사용하여 헤더 또는 텍스트 파일 정보를 코드로 변환

... 
case CL_INVALID_CONTEXT: 
    return "CL_INVALID_CONTEXT"; 
case CL_INVALID_QUEUE_PROPERTIES: 
    return "CL_INVALID_QUEUE_PROPERTIES"; 
case CL_INVALID_COMMAND_QUEUE: 
    return "CL_INVALID_COMMAND_QUEUE"; 
case CL_INVALID_HOST_PTR: 
    return "CL_INVALID_HOST_PTR"; 
... 

: 나는 전문가 복사/붙여 넣기를 사용하여 거대한 스위치/경우에이 모든 것을 넣어

... 
#define CL_INVALID_CONTEXT -34 
#define CL_INVALID_QUEUE_PROPERTIES -35 
#define CL_INVALID_COMMAND_QUEUE -36 
#define CL_INVALID_HOST_PTR -37 
... 

최근에 Vim을 사용하기 시작했습니다. Linux 명령 도구와 Vim을 사용하여보다 효율적으로이 작업을 수행 할 수있는 방법이있을 것이라고 생각합니다. 비슷한 포스트가 있었는데 거기서 누군가 Emacs와 함께 그것을했다고 주장했다. 다음 번에 유사한 작업으로 15 분의 낭비를 피하는 방법에 대한 아이디어가 있습니까?

은 (내가 oclErrorSting()이 존재하지만의 범용성을 위하여 그 무시 할 수 있음을 알고있다!)

답변

2

당신은 검색과 빔에서이 작업을 수행하고 대체 할 수

%s/#define \(\w\+\).*/case \1:^M return "\1";/g 

트릭에 출력에 ^M을 입력하면 CTRL-V을 입력 한 다음 Enter을 입력하여 출력에 개행을 넣을 수 있습니다.

이렇게하면 전체 파일에서 대체됩니다.

전체 선과 일치하는 검색을 수행하고 원하는 텍스트로 바꾸는 방식으로 작동합니다. 각 이름은 검색에서 그룹으로 캡처됩니다. 즉 \(\w\+\)이 수행하는 작업이며 일치하는 텍스트가 대체에서 두 번 사용됩니다.

+0

고마워, 그게 정확히 내가 뭘 찾고있는 것처럼 들리네! –

+1

@VictorSand''이 아닌'\ r'을 줄 바꾸기 문자열에 사용할 수 있습니다. 복사 붙여 넣기 문자열에 붙여 넣기 만하려면 붙여 넣기를 선택하십시오 ('nnoremap gV'\'[ '. getregtype (v : register) [0]. "\"] " 붙여 넣기 후에는 편집 작업을하지 않았다.) 위의 명령을'% '를 시작하지 않고 입력한다. – ZyX

2

반복적 인 작업을위한 일반적인 해결책은 macros을 사용하는 것입니다. 또는 복잡한 반복은 도움에서 호출됩니다.

기본적으로 레지스터에 입력 내용을 기록하고 단일 사례를 만든 다음 정의의 다음 줄로 이동합니다.

자세한 내용은 :help q을 참조하십시오.