화살표 키를 누르면 vi 편집기에 문자가 추가됩니다


188

vi편집기 에서 삽입 모드로 화살표 키를 사용하려고하면 편집기에 다음 문자가 삽입됩니다.

  • 나는 B를 얻을 수
  • 에 대한 내가 얻을,
  • 나는, D를 얻을 수
  • 나는 C를 얻을

이 문제를 해결하도록 도와주세요.


3
나는 제목을 읽는 것이 좋았습니다.) 화살표 키가 문자를 인쇄 할 때 (초보 사용자에게) 짜증나는 느낌의 XKCD가 있다고 확신합니다.
vvy

1
그것은 매우 무섭다;)
Kyle Bridenstine

답변:


233

.vimrc홈 디렉토리에 파일 이없는 경우 다음을 사용하여 파일을 작성하십시오.

vim ~/.vimrc

파일 맨 위에 다음 줄을 추가하십시오.

set nocompatible

파일을 저장하면 문제가 해결됩니다. :)


1
vi 용 .exrc 파일을 만들어야했지만 호환되지 않는 것으로 설정했습니다.
tgun926

25
vi대신에 사용하면 트릭이 vim있지만 ~/.exrc파일 에서 동일한 구성을 수행해야 합니다.
tzi

15
일했다. 그러나이 수정이 필요한 이유는 무엇입니까? 기본적으로 화살표를 처리하지 않는 이유는 무엇입니까?
Mohit

6
기본적으로 vi / vim은 화살표 키를 h, j, k, l 키로 대체하도록 프로그래밍되어 있습니다. 키보드의 주요 키 영역에서 이동할 필요가 없습니다.
Gaurav Manchanda 2016 년

10
다음 문제는 백 스페이스입니다. 해결책 : askubuntu.com/questions/296385/…
daVe

87

vim 설치 -> 문제를 해결합니다.

sudo apt-get install vim

유튜브 또는 웹에는 일반적으로 많은 vim / vi 튜토리얼이 있습니다. 문제 는 여기를 참조하십시오

그런 다음 평소대로 파일을 계속 엽니 다 .

vi desired-file

나를 위해 일했습니다-왜 이것이 이전에 시작한 vim과 다른지 확실하지 않습니다.
Amos Folarin

6
이것은 받아 들일만한 대답이어야합니다 (그러나 아무도 받아들이지 않는 것 같습니다). tty / ANSI 시대 터미널 대신 컴퓨터 콘솔에 vim을 완전히 '현대화'하는 가장 간단하고 깨끗한 방법입니다.
Lockszmith

그래 난 당신 Lockzsmith이 should'v되어 허용 대답에 동의
니콜로 분.

이것은 나를 위해 일했습니다. raspian에 vi / vim 버전이 포함되어 있다는 사실에 놀랐습니다.하지만 모든 자습서에서 nano를 사용하도록 지시했지만 vim이 실제로 그보다 낫다는 주장은 어렵습니다. 아마도 내가 나노 대신 vim을 사용하는 유일한 이유는 vim이 항상 모든 컴퓨터에 있기 때문에 나노 여부에 관계없이 50/50의 기회처럼 보입니다.
ArtOfWarfare

BLEEPIN '컴퓨터!
크리스

27

을 사용 vi하면을 클릭하면 텍스트 삽입i 명령이 활성화 됩니다. 이 명령을 사용하면 파일에 텍스트를 삽입 할 수 있습니다. 그리고 오른쪽을 클릭하면 :


  • 그것을 "A"를 삽입합니다,
  • 그것을 "B"를 삽입합니다,
  • ...

이 명령을 비활성화 할 때까지
명령을 비활성화하려면 vi:을 클릭 Esc
하면 화살표 키를 정상적으로 사용할 수 있습니다.

  • 올라가고
  • 내려 가서
  • ...

참고로, 다음은 몇 가지 vi명령입니다.
소스에서 .

:xReturn quit vi , 원래 호출에서 이름이 지정된 파일에 수정 된 파일 쓰기
:wqReturn qu vi vi , 이 vi 호출에 대한 최신 변경 사항이 저장되지 않았어도 원래 호출에서 이름이 지정된 파일에 수정 된 파일 쓰기
:qReturn quit (또는 종료) vi
:q!Return quit vi

이동 아래로 커서를 한 줄의
이동 커서를 한 줄 위로의
이동 커서를 한 문자 왼쪽으로
이동 한 문자 오른쪽으로 커서를

u 방금 수행 한 모든 작업을 취소하십시오 . 방금 수행 한 작업을 간단하게
. 재실행

i 삽입 할 때까지, 커서 전에 텍스트를 Esc히트
I 삽입 될 때까지, 현재 행의 시작 부분에 텍스트 Esc히트하면
a 추가 될 때까지 커서 후 텍스트를 Esc히트
A 추가 현재 행의 끝 텍스트를 때까지 Esc공격
o 개방 과 현재 행 아래에 새 줄에 텍스트를 넣을 때까지 Esc공격
O 개방Esc맞을 때까지 텍스트를 현재 줄 위에 새 줄에 넣 습니다.

r 대체 커서 (NO 아래에 하나의 문자를 Esc필요로)
cw 변경 될 때까지 커서 아래에있는 문자로 시작, 새 텍스트로 현재 단어를 Esc히트
x 삭제 커서에서 단일 문자를
Nx 삭제 커서가 문자로 시작, N 문자를
dw 삭제 커서 아래에 문자로 시작하는 단어
C 변경 때까지, 현재 행의 문자를 (대체) Esc히트
D 삭제 라인의 나머지 부분을 현재 커서 위치부터 시작하여,

dd 현재 줄 전체 삭제 현재 줄로 시작하여 N 줄을
Ndd 삭제 합니다. 예를 들면, 5dd 5 개 라인 삭제
yy 복사 (십중팔구 컷) 버퍼에 전류 선
Nyy 복사 버퍼에 현재 라인을 포함한 다음 N 라인 (십중팔구 컷)
p 붙여 텍스트 이후의 버퍼의 라인 (들) 현재 줄

0(영) 이동 커서가 현재 라인 (커서와 함께 하나)의 시작
$ 으로 이동 현재 라인의 끝으로 커서를
w 이동 다음 단어의 시작 부분으로 커서
b 이동 단어를 앞의 시작 부분으로 다시 커서
:0Return또는 1G 이동 파일의 첫 번째 줄에 커서를
:nReturn또는 nG 이동 커서를 n 줄
:$Return또는 커서를 파일의 마지막 줄로 G 이동

/string 검색 텍스트 문자열의 발생에 대한 순방향
?string 검색 텍스트 문자열의 발생에 대한 후진
n 이동 검색 문자열의 다음 발생에 대한
N 움직임 반대 방향으로 검색 문자열의 다음 발생까지


28
"B"를 삽입하는 화살표 키는 예상되는 동작이 아닙니다. 화살표 키는 삽입 모드에 관계없이 커서를 상하 좌우로 움직여야합니다.
James Wong

2
@JamesWong 실제로 Vi가 원래 프로그래밍 된 방식 이므로 예상 된 동작입니다. VI의 후속 버전 인 VIM은 기본적으로 Vi 호환 모드에 있으며 여기에는 화살표 키에 대한이 동작이 포함됩니다. VIM이 실제로 의도적으로 프로그래밍 한 작업을 수행하기 때문에 여기서 "해야한다"라는 단어는 단지 주관적인 것입니다.
villapx 2016

2
@villapx-아니요, 예상되는 동작이 아닙니다. 예상되는 동작은 일반 사용자의 기대에 따라 정의됩니다. vi / vim을 사용하는 일반적인 사람은 서버에 설치되어 있기 때문에 빠르게 구성해야하며 다른 것을 설치하는 데 방해가되지 않기 때문에 사용하고 있습니다. 옵션이 주어 졌을 때 실제로 vim을 사용하는 사람은 거의 없으며, 이러한 모든 기능이나 단점을 실제로 아는 사람은 거의 없습니다. 일반적인 사용자는 화살표가 커서를 움직일 것으로 예상합니다. 이것이 예상되는 동작입니다. 다른 것은 예기치 않은 동작이며 예상치 못한 버그로 작성해야합니다.
ArtOfWarfare

@ArtOfWarfare 그러나 "예상"을 자유롭게 정의 할 수 있습니다. VIM 매뉴얼에서 이것이 어떻게 작동해야하는지 명확하게 알았 기 때문에 코드 작성자가 예상 한 것으로 정의하고 있습니다 :help compatible. 이 기본값은 Vi처럼 Vim을 사용하고 '호환되는'옵션에 대해 알고 싶지 않은 사람들을 위해 선택되었습니다. "
villapx

코드의이 부분을 작성하고, 그냥 관객이 무엇 다르기 때문에 때 @ArtOfWarfare는 기본적으로, VIM의 저자는 분명 마음에 특정 고객을했다 당신의 고객이 될 것, 그것은 버그 의미하지 않는다. 원하는 경우 버그로 제출할 수 있지만 VIM 근본 주의자 (그리고 실제로는 '수동', RTFM 애호가)를 존중하는 사람에 의해 배급받을 준비를하십시오.
villapx

17

편집 모드에서 화살표를 눌렀을 때 문자 인쇄를 비활성화하려면 다음을 수행하십시오.

vi $HOME/.exrc 

(존재하지 않는 경우 파일을 작성한 후) 행 set nocompatible을 추가 하고 저장하십시오.


나는 그것을 .vimrc에 넣었다. 왜 .exrc에 넣습니까?
pauljohn32

Vim 소스 둘 다- :version로드 순서 에 대한 출력 참조 ( :h .exrc또는 :h init). 누군가 vi와 vim 모두에 적용하기를 원하거나 습관의 힘이 될 수 있다고 생각합니다.
윌리엄 로버트슨

11

vi 편집기에는 세 가지 모드가 있습니다.

  • 명령 모드
  • 입력 모드
  • 기본 모드.

파일을 열면 기본 모드에 있습니다. 지금 당신은, 텍스트의 특정 위치로 이동 단지 화살표 키를 사용하거나 사용하려는 경우 h, j, k, l키. 당신을 누르면하지 않은 경우에만 작동 것이 있습니다 i(또는 다른 입력 모드가 같은 명령을 입력 a, A, I).

'B'의 이유는 입력 모드의 화살표 키가 화살표 키로 작동하지 않기 때문에 Esc아무 때나 누르면 기본 모드로 이동합니다. 입력 모드 언론에 이동하는 경우 ia, 그리고 탐색 단지 눌러 i키를 사용 화살표 키 또는 h, j, k,를 l.


7

정확히 같은 문제가 있었지만 로컬 컴퓨터뿐만 아니라 citrix 수신기를 통해 Win7 VM의 sles 컴퓨터에서 퍼티를 통한 연결에서도 발생했습니다. 로컬 호스트와 원격 호스트 모두 Ubuntu를 다시 설치 한 후에도 동일한 문제가 발생했습니다.

그것을 알아 낸 후

$ localectl list-keymaps 
Couldn't find any console keymaps.

이 이상한 VI 동작을 일으켜서 패키지 콘솔 데이터를 설치하여 문제를 해결했습니다!

sudo apt-get install console-data

3

노트 :

다른 게시물에는 좋은 정보가 있지만 이 동작이 발생한 이유 를 설명하는 게시물은 없습니다 . 많은 사람들이 앞으로 이것에 걸려 넘어 질 것입니다. 또한 이전 게시물이 도움이 되었기 때문에이 질문이 해결 된 것으로 표시 할 수 있습니까?


여기에 설명이 있습니다 :

Vi 는 오랫동안 유닉스 시스템에 기반을 둔 편집기입니다. 그것은 좋은 도구이지만 반복되어 왔으며 이제는 더 좋습니다. Vim 은 나중에 작성 되었으며 반복입니다. 사람들은 일반적으로 vi를 'vim-minimal'이라고하며 vim은 vi의 "향상된"버전입니다. 당신은 이것을 다음과 같이 생각할 수 있습니다 : vi는 핵심이고 vim은 그것에 확장합니다.

아마도 당신이 행동을 어떻게 발견했는지 :

이 문제를 발견하기 위해 " i "를 눌러 삽입 모드 로 들어간 다음 화살표 키를 사용하여 올바른 선과 편집 점을 탐색했습니다. 이것이 예기치 않은 문자 문제의 원인입니다.

솔루션 1 또는 2

1) vi를vi someFile 사용하는 동안 먼저 편집 점으로 이동 한 다음 삽입 모드로 들어갑니다.

2) 처음부터 vimvim someFile사용 하십시오.

매뉴얼 (man page)을 읽거나 도움을 위해 -h를 사용할만큼 스트레스를 줄 수 없습니다. 쉘의 패턴을 조정하면 매뉴얼 페이지가 가장 친한 친구가됩니다. 예 : man vi또는man vim


Vim이 설치되어 있는지 확인하십시오 .

콘솔 창을 열고 다음을 실행하십시오.

dpkg --list | grep vim

이와 비슷한 것을 얻으면 vim을 사용하기 시작할 수 있습니다.

~ $ dpkg --list | grep vim
ii  vim         2:7.4.052-1ubuntu3  amd64  Vi IMproved - enhanced vi editor
ii  vim-common  2:7.4.052-1ubuntu3  amd64  Vi IMproved - Common files
ii  vim-runtime 2:7.4.052-1ubuntu3  all    Vi IMproved - Runtime files
ii  vim-tiny    2:7.4.052-1ubuntu3  amd64  Vi IMproved - enhanced vi editor - compact version

명령 프롬프트가 아무 것도 반환하지 않으면 vim이 설치되지 않은 것입니다. 아래 예제를 사용하여 리포지토리를 업데이트 한 다음 vim을 설치하십시오.

sudo apt-get update
sudo apt-get install vim

인터넷에서 무언가를 고치는 방법을 검색 할 때만 vi 또는 vim을 사용하고 입력하는 것을 잊어 버린 경우에만 vim미래에 그것을 고칠 수있는 한 가지 방법이 있습니다. 주의를 기울이십시오. 별명을 사용하여 vim에 대한 참조로 vi를 겹쳐 쓸 수 있으므로, 자주 입력하지 않아도 "oops"없이 vim을 얻을 수 있습니다. 순간. 나중에 언제든지 별칭을 삭제할 수 있습니다.

을 입력하십시오 vim .bashrc. 빈 줄로만 ~(또는 alias그룹으로 묶인) 다른 줄로 이동 한 다음 i 키를 눌러- 삽입-모드로 들어갑니다. 별도의 줄에 다음을 입력합니다.

alias vi='vim'

를 누른 Esc다음를 입력하십시오 :wq. 이제 파일을 다시로드해야합니다. 유형 source .bashrc편집 한 후 열리는 다른 쉘은 .bashrc 파일을 자동으로로드합니다.


3

주어진 모든 설명은 약간 기괴합니다. vi가 있지만 vim이 설치되어 있지 않습니다.

대안 확인 : /etc/alternatives/vi/usr/bin/vim.tiny

그래서 vi입니다 vim.tiny, 그리고 그것을 사용합니다 /etc/vim/vimrc.tiny.

그리고 vimrc.tiny다음 줄을 찾으십시오.

set compatible

이 파일에서 거의 유일한 것입니다. 에을 /etc/vim/vimrc사용하고 nocompatible있습니다.

따라서 vim을 설치하거나 vimrc.tiny파일을 변경하거나 다음 ~/.vimrc행을 포함하는 고유 한 파일을 작성하십시오 .

set nocompatible

1
기괴한 것이 무엇인지 잘 모르겠습니다. 1. Vim-askubuntu.com/a/220072/158442 설치 , 2. 생성 ~/.vimrc및 설정 nocompatible: askubuntu.com/a/353944/158442 또는 3. 시스템 파일 편집 제안 . 편집 제안 /etc/vim/vimrc.tiny은 새로운 것이지만, 당신은 그들과 같은 것을 제안하면서 기괴한 답변이라고 부릅니다.
muru

1

전통적인 vi 편집기는 화살표 키 (...)를 인식하지 못합니다. 두 가지 해결책이 있습니다.

  1. vi 대신 vim을 사용하십시오.
  2. h, j, k 및 l을 사용하여 탐색합니다 (기존의 vi btw에서 편집하는 동안 탐색 할 수 없음).

사실이 아닙니다. terminfo / termcap 및 libcurses 기반 앱을 찾으십시오. 1990 년부터 Xenix, SCO Unix, AIX, 이전 hpux 등에서 vi를 사용하고 있으며 80 년대의 pure-vi는 이미 terminfo / termcap 매핑을 지원합니다.
Luciano

@ james-wong 그럼 내 대답을 바꿔야합니다. "우분투에서 vi를
깨끗하게하는

... 그리고 이것은 @luciano
MadMike에

1

이것은 또한 TERM변수 때문일 수 있습니다 . 예를 들어 다음과 같이 설정하십시오.

 export TERM=xterm

이것은 다른 대답이하지 않은 문제를 해결했습니다. 감사!
greg

1

일부 시스템에서는 nocompatible옵션을 사용할 수 없거나 플러그인이 화살표 키 기능을 깨뜨린 경우 문제를 해결하지 못할 수 있습니다. 해결 방법은 다음과 같습니다.

.exrc다음 줄을 포함 하도록 파일을 편집하십시오 .

map! ^[OA ^[ka
map! ^[OB ^[ja
map! ^[OC ^[la
map! ^[OD ^[ha

또는 문제가 정상 모드에만있는 경우 nmap다음 a과 같이로 변경 하고 다음을 건너 뛸 수 있습니다 .

nmap! ^[OA ^[k

등등.

다음은이를 생성하는 데 필요한 주요 조합입니다 (처음 하나만 표시).

map! <CTRL-V><Up-Arrow> <CTRL-V><ESC>ka

편집 모드가 종료되고 원하는 방향으로 이동 한 다음 편집 모드로 다시 들어갑니다. 이것은 리터럴 <ESC> <O> <A> 등의 이스케이프 시퀀스를 읽는 Vi를 극복하기 위해 필요합니다.

출처 : https://hea-www.harvard.edu/~fine/Tech/vi.html


1

VI의 경우 "~ / .exrc"파일을 생성 또는 편집하거나 VIM은 "~ / .vimrc"파일을 생성 또는 편집하거나 라인에 추가합니다.

set nocompatible

이 글을 쓰는 시점에서 두 번째로 많이 투표 한 항목에 대한 칭찬이있어 왜 참가가 허용되지 않았는지 궁금합니다. 다른 편집기를 설치할 수없는 호스트가 있기 때문입니다. 그럼에도 불구하고 vim은 때때로 같은 효과를 가지므로 상위 두 항목에서 유용한 정보가 많이 있습니다. 그러나 나는 이것이 100 % 정확한 시간 중 어느 것도 100 % 정확하지 않은 이유를 분명히하기를 희망합니다.


0

이 기계에 나는에 있었다 make sure

set nocompatible

입니다 last entry in ~/.vimrc. 또는 마지막 항목 중 하나 이상, 특히 더 이상 플러그인이로드되지 않습니다.

HTH


0

어떤 이유로 우분투는 새로운 18.04 VPS에서 사용자 루트에 대한 envvar HOME 초기화를 생략했습니다. 이 경우 vi는 .vimrc 파일을 찾을 수 없습니다. 일반 사용자 (/ home /의 경우)에는 문제가 발생하지 않습니다.

변수를 확인하려면

echo $HOME

빈 줄이 생기면 변수가 설정되지 않은 것입니다. 문제는 후에 사라졌다

export HOME=/root

명령을 /root/.bashrc 파일로 옮겼습니다 (일반적으로 어디에 설정되어 있는지 모르겠습니다).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.