문제

나는 종종 멀티 라인 기능 호출을하고 한 줄로 줄이고 싶습니다. 예를 들어, 변환 ...

function_call(
     'first_arg',
     'second')

에게

function_call('first_arg', 'second')

EMAC는이를 돕기위한 몇 가지 명령이 있습니까? 구체적으로, 모든 공백을 지점에서 최초의 비 whitescace 문자로 삭제하는 명령이 있습니까?

도움이 되었습니까?

해결책

당신은 시도 할 수 있습니다 delete-indentation, 여러 줄에 한 줄에 참여하기위한 내가 가장 좋아하는 명령. 당신의 예에서, 커서를 "두 번째"와 줄에 올려 놓고 쳤다. m-^ 두 배. 다음은 문서입니다.

m-^ 명령을 실행합니다 delete-indentation, 대화식 컴파일 된 LISP 함수입니다 simple.el.

그것은 묶여 있습니다 m-^.

(delete-indentation &optional arg)

이 라인에 가입하여 이전에 공학적으로 공백을 수정하십시오. 채우기 접두사가 있으면이 줄의 시작 부분에서 삭제하십시오. 인수와 함께이 줄에 가입하여 다음 줄에 가입하십시오.

다른 팁

살펴보십시오 fixup-whitespace 기능. emacs와 함께 제공됩니다 simple.el. 문서는 다음과 같습니다.

포인트 주위의 물체 사이의 공백을 고정합니다. 맥락에 따라 한 공간을 남겨 두십시오.

비슷한 함수, just-one-space, 저것

지점 주위의 모든 공간과 탭을 삭제하여 한 공간을 남겨 둡니다.

일반적으로 묶여 있습니다 M-SPC.

구체적으로, 모든 공백을 지점에서 최초의 비 whitescace 문자로 삭제하는 명령이 있습니까?

거의 그렇게하는 명령이 있습니다.

m- 는`simple.el '에서 대화식 컴파일 된 LISP 함수 인 명령 삭제 horizontal-space를 실행합니다.

그것은 m- 에 묶여 있습니다.

(낙하산 공간 삭제 및 옵션 후진 전용)

포인트 주변의 모든 공간과 탭을 삭제합니다. 뒤로 전용이 NIL이 아닌 경우 포인트 전에만 삭제하십시오.

항상 MZ를 사용하여 문자까지 삭제할 수 있습니다.

예를 들어 귀하의 경우 :

MZ '는 단일 견적으로 삭제합니다 (불행히도 이것은 단일 견적도 삭제하지만 약간의 불편 함).

다음 매크로를 사용하여 다음 줄을 현재 라인의 끝으로 "당겨", 공백을 압축합니다.

(defun pull-next-line() 
  (interactive) 
  (move-end-of-line 1) 
  (kill-line)
  (just-one-space))

이것은 @jrockway와 정확히 반대입니다 move-line-up 그리고 delete-indentation, 나는 더 자연스러운 것을 발견합니다. 그만큼 just-one-space 매크로의 명령은 정확히 @Mike입니다 M-SPACE.

나는 묶인다 pull-next-line 에게 M-J (Vim과 유사하게 J, "join", command)의 경우) .emacs.

(global-set-key (kbd "M-J") 'pull-next-line)

예시. 부름 pull-next-line 첫 번째 줄에

function_call(
     'first_arg',
     'second')

수율

function_call( 'first_arg',
     'second')

그것을 두 번째로 부르면 수확이 있습니다

function_call( 'first_arg', 'second')

Alt 공간은 한 공백 문자열을 단일 공간 문자로 줄이지 만 Newline을 삭제하지는 않습니다. 그래도 조금 도움이 될 것입니다.

포인트에서 최초의 비 whitespace (또는 Newline)로 모든 것을 삭제하려면 비 whitespace char, alt 공간, 백 스페이스 (최종 공백 숯을 제거하기 위해)를 입력 한 다음 백 스페이스 (추가 된 숯을 삭제하려면 백 스페이스를 입력하십시오.

멀티 라인 함수 선언을 단일 라인 선언으로 바꾸려면 Alt-Space, Backspace 및 Alt-E (Goto-endofline) 명령의 조합을 사용하십시오.

이 작업을 수행하는 다소 과감한 방법입니다 배고픈 지연 방법:

Hungry-Delete는 삭제중인 방향으로 모든 공백을 삭제하는 작은 모드입니다.

약간 다른 접근법은 당신을 위해 일을하기 위해 키보드 매크로를 만드는 것입니다. 따라서 매크로 스테이지를 만들기 위해 다음과 같은 일반적인 시나리오입니다.

foo


               bar

"foo"라는 선 다음 나중에 몇 줄과 흰색 공간이있는 "바"를 씁니다.

그런 다음 Foo와 Bar 사이의 어느 곳에 서 있든 다음을 수행하십시오.

C-x (                    ; start recording macro
M-b                      ; move backwards to the beginning of foo
END                      ; move to the end of foo
C-space                  ; place mark
C-M-f                    ; move to the end of bar
HOME                     ; move to the beginning of the line
C-w                      ; yank out all the white space
M-SPACE                  ; leave only one space
C-x )                    ; end recording the macro
M-x name-last-kbd-macro  ; name it, call it jline or something 

이제 항상 MX 일선으로 두 단어 사이의 모든 흰색 스페이스를 제거 할 수 있습니다.

.emacs 파일의 어딘가에 MX Insert-KBD-Macro를 발행하여 키보드 매크로를 저장하는 것을 기억하십시오.

(fset 'jline
   [?\M-b end ?\C-  ?\C-\M-f home ?\C-w escape ? ])

나는 이것을한다:

(defun move-line-up ()
  "Removes leading spaces from the current line, and then moves
the current line to the end of the previous line."
  (interactive)
  (let (start end)
    (save-excursion
      (beginning-of-line)
      ; get first non-space character, only look on this line
      (let ((search-end (save-excursion (end-of-line) (point))))
        (re-search-forward "[^[:space:]]" search-end))
      (setq end (1- (point)))
      (previous-line)
      (end-of-line)
      (setq start (point))
      (delete-region start end))
    (goto-char start)))

(defun move-next-line-up ()
  "Moves the next line to the end of the current line"
  (interactive)
  (next-line)
  (move-line-up))

다음과 같이 바인딩합니다.

(global-set-key (kbd "C-x ,") 'move-line-up)
(global-set-key (kbd "C-x .") 'move-next-line-up)

그래서 당신의 문제를 해결하기 위해, "second)라는 라인에서 C-x , C-x ,

모든 삭제가 그런 식으로 행동하기를 원한다면 Greedy-Delete를 확인할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top