矢印キーを押すと、viエディターで文字が追加されます


188

viエディターの挿入モードで矢印キーを使用しようとすると、次の文字がエディターに挿入されます。

  • ため、私はBを取得します
  • 以下のための私を得ます、
  • ため、私はDを取得します
  • ため、私はCを取得

この問題の解決にご協力ください。


3
タイトルを読んで大笑いしました;)矢印キーが文字を印刷するときに来る(初心者ユーザーにとって)不気味な感じのためのXKCDがあると確信しています。
vvy

1
とても怖いです;)
カイル・ブリデンスティン

回答:


233

.vimrcホームディレクトリにファイルがまだない場合は、これを使用してファイルを作成します。

vim ~/.vimrc

この行をファイルの先頭に追加します。

set nocompatible

ファイルを保存すると、問題が解決するはずです。:)


1
私はvi用の.exrcファイルを作成しなければなりませんでしたが、nocompatibleを設定するとうまくいきました。
tgun926

25
vi代わりにを使用する場合vimは、~/.exrcファイル内で同じ設定を行う必要があります。
tzi

15
働いた。しかし、なぜこの修正が必要なのでしょうか?デフォルトで矢印を処理しないのはなぜですか?
Mohit

6
デフォルトでは、vi / vimは矢印キーをキーh、j、k、lに置き換えるようにプログラムされています。これは、キーボードの主要なキー領域から移動する必要がないように行われます。
ガウラブマンチャンダ

10
:次の問題は、バックスペース、ソリューションですaskubuntu.com/questions/296385/...
デイブ

87

vimをインストールします ->これで問題が修正されます。

sudo apt-get install vim

YouTubeやWeb全般には、多くの優れたvim / viチュートリアルがあります。あなたの問題については、こちらをご覧ください

その後、通常どおりファイル開き続けます

vi desired-file

私のために働いていた-これは私が以前に起動したvimの異なる理由はわからないが
アモスFolarin

6
これは受け入れられた答えでなければなりません(しかし、誰も受け入れていないようです)。それは、vimの完全代わりに、TTY / ANSI時代端末の(コンピュータコンソールに「近代化」を取得する最も簡単な/クリーンな方法です。
Lockszmith

はい、Lockzsmithに同意します。これは受け入れられた答えである
はずです

これは私のために働いた。raspianにはvi / vimのバージョンが付属していることに驚いています...そのすべてのチュートリアルではnanoを使用するように指示されていますが、vimがそれよりも本当に優れていると主張するのは困難です。おそらく私がnanoではなくvimを使用する唯一の理由は、vimは常にすべてのマシンにあり、nanoがあるかどうかは50/50のチャンスのようだからです。
ArtOfWarfare

BLEEPIN 'コンピューター!
クリス

27

viクリックするiと、テキストを挿入するコマンドがアクティブになります。
このコマンドを使用すると、ファイルにテキストを挿入できます。
そして、右をクリックすると:

  • その上に「A」を挿入します、
  • その上に「B」を挿入します、
  • ...

このコマンドを無効にするまで
でコマンドを無効にするにはvi:をクリックするだけEsc
で、矢印キーの通常の使用に戻ります:

  • 上がるために、
  • 下がるために、
  • ...

FYI、ここにいくつかあるviコマンドは:
このことからソース

:xReturn VIを終了し、元の呼び出しで指定されたファイルに変更されたファイルを書き出す、
:wqReturn VIを終了し、元の呼び出しで指定されたファイルに変更されたファイルを書き出す、
:qReturn VI終了(または終了)
:q!Return のviを終了し、最新の変更はこのVIの呼び出しのために保存されていないにもかかわらず、

移動カーソルを下に1行
移動カーソルを1行
移動カーソルが1つの文字左に
移動右にカーソルを1つの文字

u 行ったばかりの操作をすべて元に戻します。シンプルなトグルは、あなたがやったことは何でも
. やり直します

i 挿入されるまで、カーソルの前にテキストをEscヒット
I 挿入されるまで、現在の行の先頭にテキストをEsc打つ
a 追加されるまで、カーソルの後にテキストをEscヒットが
A 追加、現在の行の最後にテキストをするまで、Escヒット
o オープンし、現在の行の下に新しい行にテキストを配置するまで、Escヒット
O オープンEscヒットするまで、現在の行の上の新しい行にテキストを入れます

r 置き換えカーソルの下の単一の文字を(なし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」を挿入する矢印キーは、予期される動作ではありません。矢印キーは、挿入モードに関係なく、カーソルを上下/左右に移動する必要があります。
ジェームス・ウォン

2
実際@JamesWong、それがされることがViには元々プログラムされた方法であるとして、予想される動作。(非公式に)Viの後継であるVIMは、デフォルトでVi互換モードになっています。これには、矢印キーのこの動作が含まれます。したがって、VIMは実際に意図的にプログラムされた処理を実行しているため、ここでの「すべき」という言葉は単なる主観的なものです。
villapx 16

2
@villapx-いいえ、予期された動作ではありません。予想される動作は、一般的なユーザーが期待するものによって定義されます。vi / vimを使用している典型的な人はそれを使用しています。これは、サーバーにインストールされるものであり、迅速に構成する必要があり、他の何かをインストールするのに十分なことをしないからです。実際にオプションが与えられたときにvimを使用することを選択する人はほとんどいません。実際、これらすべての機能や癖を知っている人はほとんどいません。一般的なユーザーは、矢印がカーソルを移動することを期待しています-これが予想される動作です。それ以外は予期しない動作であり、予期しない動作のバグとして作成する必要があります。
ArtOfWarfare

@ArtOfWarfareどのように選択しても、「期待」を自由に定義できます。コードの作成者が期待するものとして定義しています。VIMマニュアルでは、これがどのように動作するのかが明確であるためです。from :help compatible:「デフォルトでは、このオプションはオンで、Viのデフォルトはオプション。このデフォルトは、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エディターには次の3つのモードがあります。

  • コマンドモード
  • 入力モード
  • デフォルトモード。

youuがファイルを開くと、デフォルトモードになります。今、あなたは、あなたのテキストの特定の位置に行くだけで、矢印キーまたは使用を使用したい場合はhjklキー。これはあなたが押されていないときにのみ動作することに注意してくださいi(またはその他の入力モードは次のようにコマンドを入力しaAI)。

「B」の理由は、入力モードの矢印キーが矢印キーとして機能しないためである可能性があるため、Escいつでも押すだけでデフォルトモードに移行できます。入力モードのプレスに移行するときia、ナビゲートするだけ押しiキーと矢印キーを使用したりhjk、をl


7

私はまったく同じ問題を抱えていましたが、ローカルマシンだけでなく、citrixレシーバーを介したWin7 VMのslesマシン上のパテを介した接続でも同様でした。Ubuntuの再インストール後にまったく同じ問題が発生した後、ローカルホストとリモートホストの両方が表示されます。

それを見つけた後

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

この奇妙なVIの動作を引き起こします問題を解決するパッケージconsole-dataをインストールしました!

sudo apt-get install console-data

3

注意:

他の投稿には良い情報がありますがこの動作が発生した理由を説明しようとした投稿はありませんでした。多くの人々は、将来これにつまずくでしょう。また、以前の投稿のいずれかがあなたを助けた可能性が高いため、この質問を解決済みとしてマークできますか?


ここに説明があります:

Viは長い間使用されてきたエディターで、ルーツはUnixシステムに遡ります。これは優れたツールですが、繰り返し使用されており、現在では改善されています。Vimは後で書かれたもので、その繰り返しです。人々は一般にviを「vim-minimal」と呼び、vimはviの「改善された」バージョンです。次のように考えることができます:viがコアであり、vimはそれを拡張します。

おそらくどのように動作を発見したか

この問題を発見するには、「i」を押して挿入モードに入り、矢印キーを使用して正しい行と編集ポイントをナビゲートしました。これが予期しない文字の問題の原因です。

解決策1または2

1)viのvi someFile使用中に、まず編集ポイントに移動してから、挿入モードに入ります。

2)最初からvimvim someFile使用します。

マニュアル(manページ)を読んだり、ヘルプに-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に、将来のために修正できる1つの方法があります。注意してください。エイリアスを使用してvimをvimへの参照で上書きすると、まれに将来何を入力しても、その「おっと!」なしでvimを取得できます。瞬間。エイリアスはいつでも削除できます。

を入力しvim .bashrcます。aだけで空行に移動し~(または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と設定nocompatibleaskubuntu.com/a/353944/158442、または3.システムファイルの編集を提案します。編集する提案のみ/etc/vim/vimrc.tinyが新しく、それでもあなたはそれらと同じことを提案しながら奇妙な答えを呼びます。
ムル

1

従来のviエディターは、矢印キー(... afair)を認識しません。2つの解決策があります。

  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マッピングをサポートしています。
ルチアーノ

@ james-wongそれでは、答えを言い換えるべきです。「Ubuntuでviを純粋にしない...」
MadMike

...そしてこれは@lucianoへのコメントとして意図されていました
MadMike

1

これもTERM変数が原因である可能性があります。たとえば次のように設定します。

 export TERM=xterm

これにより、他の回答では解決できなかった問題が解決しました。ありがとう!
グレッグ

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

これにより、編集モードが解除され、目的の方向に移動して、編集モードに戻ります。これは、Viがエスケープシーケンスをリテラル<ESC> <O> <A>などのシーケンスとして読み取るのを克服するために必要です。

ソース:https : //hea-www.harvard.edu/~fine/Tech/vi.html


1

VIの場合、ファイル「〜/ .exrc」を作成または編集するか、VIMでファイル「〜/ .vimrc」を作成または編集して、行に設定または追加します。

set nocompatible

この記事の執筆時点で、2番目に多く投票された項目に、なぜエントリが受け入れられなかったのか疑問に思う賞賛があります。その理由は、他のエディターのインストールを許可しないホストが存在するためです。それでもvimには同じ効果がある場合があるため、上位2つのエントリから使用可能な情報がたくさんあります。しかし、これが、どちらも100%正しい場合が100%正しい理由を明らかにすることを願っています。


0

このマシンで私はmake sureそれをしなければなりませんでした

set nocompatible

ですlast entry in ~/.vimrc。または、最後のエントリの少なくとも1つ、特にその後プラグインがロードされない。

HTH


0

何らかの理由で、Ubuntuは新しい18.04 VPSでユーザーrootのenvvar HOMEの初期化を省略しました。その場合、viは.vimrcファイルを見つけることができません。この問題は、通常のユーザー(/ home /)では発生しません。

変数を確認するには:

echo $HOME

この結果が空白行になる場合、変数は設定されていません。問題はなくなりました

export HOME=/root

コマンドを/root/.bashrcファイルに移動しました(これが通常設定される場所はわかりません)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.