как да копирате нещо от редактора на vim в командния ред на shell

Възнамерявам да копирам нещо от vim editor в командния ред на shell. Опитах много начини, но намирам, че всички те работят само когато са в един и същ vim редактор. Трябва да копирам и поставя между редактора на vim и командния ред на shell. Това е vim -> shell

PS: Използвам шпакловка.

РЕДАКТИРАНЕ:

Между другото, какво ще стане, ако просто копирате нещо от редактора на vim и го поставите в терминала и в кутията на unix/linux?

ВНИМАНИЕ:

изходът на :echo has("X11") във vim е 0, така че моята система не поддържа X11!


person dj199008    schedule 16.02.2014    source източник
comment
ако не можете да използвате средния бутон на мишката, за да поставите * регистър, можете или да запишете текстовата част във временен файл, или да използвате други базирани на обвивката инструменти (grep/sed/awk/....), за да извлечете тази част.   -  person Kent    schedule 16.02.2014
comment
средният бутон на мишката изглежда върши работата по поставянето на vim eitor! Това не е моята нужда.   -  person dj199008    schedule 16.02.2014
comment
ако средният бутон работи, може да копира от vim-›терминал. (ако имате инсталиран X). не си обяснил тази част във въпроса си. можете да опитате този ред, ако проработи, ще го публикувам отново като отговор: във vim: изберете редовете, натиснете: "*y, превключете към вашия терминал, щракнете върху средния бутон на мишката.   -  person Kent    schedule 16.02.2014
comment
Избирам редовете чрез Ctrl+v и след това натискам *y, откривам, че *y не работи. Имахте предвид y? Но когато натисна y и използвам средния бутон на мишката, не работи. Имах предвид, че средният бутон на мишката може да постави това, което е в clipborad към vim редактора, а не към терминала.   -  person dj199008    schedule 16.02.2014
comment
Имах предвид "*y, че ще изтегли избрания текст в * регистър, така че да можете да щракнете със средния бутон, за да го прочетете навсякъде (не само в терминала)   -  person Kent    schedule 16.02.2014
comment
* изглежда отговаря на работата в моята vim среда. Съжалявам, не работи.   -  person dj199008    schedule 16.02.2014
comment
натискаш double quote then star then y! не star y   -  person Kent    schedule 16.02.2014
comment
А, свързвам отдалечен хост, който е linux кутия, чрез putty и отварям vim редактор в отдалечения хост. Операционната система на локалния ми хост е Windows.   -  person dj199008    schedule 16.02.2014


Отговори (4)


Ако вашата версия на vim >= 7.3.74, можете да настроите vim да използва системния клипборд по подразбиране, като добавите ред към вашия .vimrc:

set clipboard=unnamedplus

за подробности вижте тази връзка. След това използвате командата y(ank) във vim, съдържанието е в системния клипборд.

РЕДАКТИРАНЕ:
това решение и решението "*y изискват Vim, който има поддръжка на клипборда. Тъй като това ви липсва, използвайте cat/grep/less/tail... за извличане на текста, който искате да копирате.

person jfly    schedule 16.02.2014
comment
Проблемът ми е, че мога да поставя това, което е в клипборда, във всеки файл, но не успявам да го поставя в терминала (прозорец на замазка!) - person dj199008; 16.02.2014
comment
да, но клавишната комбинация Shift+Insert работи само когато се постави в vim редактор в putty. - person dj199008; 16.02.2014
comment
Изглежда, че искате да копирате от редактора на vim към терминала, и двата са в отдалечения хост, отворен в putty? Ако е така, това би било невъзможно само с putty, тъй като putty няма достъп до системния клипборд на отдалечения хост, а клипбордът на хоста на Windows няма представа какво сте копирали. Може би имате нужда от препращане на X11 или просто използвайте мишката, за да изберете съдържанието. - person jfly; 16.02.2014
comment

(Предишният ми отговор на предишен ваш въпрос е до голяма степен приложим тук).

Вие сте свободни да анализирате всеки тип, който искате, просто трябва да демонстрирате, че определен тип има FromJSON екземпляр. В този случай трябва да анализирате конкретни типове резултати от MyFamily, защото всички те имат подходящи екземпляри.

instance FromJSON (Some MyCompoundType) where
    parseJSON = withObject "MyCompoundType" $ \o -> do
      cons :: String <- o .: "constructor"
      mt :: MyType <- o .: "myType"
      case toSing mt of
        SomeSing smt ->
          case cons of
            "CompoundNoIndex" -> pure $ Some smt CompoundNoIndex
            "CompoundWithIndex" -> case smt of
              SMyValue1 -> Some SMyValue1 . CompoundWithIndex <$> o .: "field"
              SMyValue2 -> Some SMyValue2 . CompoundWithIndex <$> o .: "field"
              SMyValue3 -> Some SMyValue3 . CompoundWithIndex <$> o .: "field"

Тук предположих, че има нещо, което показва кодирания конструктор. Има много алтернативни формати за кодиране и декодиране, разбира се.

Като алтернатива можем да съберем приближение на количествено определени ограничения и да използваме повече единичен таг, анализиран от полето "myType":

import Data.Constraint -- from "constraints"
import Data.Proxy

data MyFamilySym :: TyFun MyType * -> *
type instance Apply MyFamilySym a = MyFamily a  

class ForallInst (f :: TyFun k * -> *) (c :: * -> Constraint) where
  allInst :: Proxy '(f, c) -> Sing x -> Dict (c (f @@ x))

instance ForallInst MyFamilySym FromJSON where
  allInst _ SMyValue1 = Dict
  allInst _ SMyValue2 = Dict
  allInst _ SMyValue3 = Dict  

instance FromJSON (Some MyCompoundType) where
    parseJSON = withObject "MyCompoundType" $ \o -> do
      cons :: String <- o .: "constructor"
      SomeSing smt <- toSing <$> o .: "myType"
      case cons of
        "CompoundNoIndex" -> pure (Some smt CompoundNoIndex)
        "CompoundWithIndex" ->
          case allInst (Proxy :: Proxy '(MyFamilySym, FromJSON)) smt of
            Dict -> Some smt . CompoundWithIndex <$> o .: "field" 

Ключовият момент тук е дефункционализацията с MyFamilySym и Apply. Това ни позволява ефективно да поставим MyFamily в главите на екземпляри, които иначе биха били забранени от GHC. Вижте тази публикация в блог за повече относно дефункционализацията в singletons.

С количествено определени екземпляри над типови семейства има едно нещо, което никога не можем да избегнем: изписване на всички случаи на типовото семейство и демонстриране на екземпляр за всеки случай. Решението ForallInst също прави това, но поне изисква да изпишем случаите само веднъж.

- person dj199008; 17.02.2014
comment
ако използвате unix/linux кутия локално, а не я свързвате дистанционно, всички тези отговори трябва да работят. - person jfly; 17.02.2014
comment

" + y за изтегляне на текст във vim, след това ctrl + shift + < kbd>v за поставяне в терминала.

person Jake Sellers    schedule 17.02.2014
comment
изглежда, че след като натисна ctrl + shift + v, ще произведе много неща, които може да не искам. - person dj199008; 17.02.2014
comment
@user2886717 Можете ли да бъдете по-конкретни? ctrl shift v просто поставя всичко, което е в клипборда, към вашия терминал. И двете класически команди ctrl + c/v могат да се използват на терминала просто чрез добавяне на shift. - person Jake Sellers; 18.02.2014
comment
Само за да сте сигурни, натискате ли +? + е там само за да покаже, че трябва да натиснете и трите бутона едновременно, всъщност не натискате клавиша +, за да поставите в терминала. - person Jake Sellers; 18.02.2014
comment
Моята система не поддържа X11, така че предполагам, че това е причината, поради която всички тези решения не работят за мен. - person dj199008; 18.02.2014

от коментарите изглежда, че средният бутон на мишката ви работи за * буфер, можете да изберете текст във vim, след което натиснете: 3 натискания на клавиши:

"*y

и превключете към друга програма, терминал, браузър или каквото и да е, щракнете върху средата на мишката, за да получите изтеглен текст.

прочетете :h y за подробности, как да изтеглите текст и да го запазите в определен регистър (в този случай това е регистър *)

person Kent    schedule 16.02.2014
comment
Проблемът ми е, че мога да поставя това, което е в клипборда, във всеки файл, но не успявам да го поставя в терминала (прозорец на замазка!) - person dj199008; 16.02.2014

Използване на тръба

Изберете ред(ове) с помощта на команда V, след което изпълнете този избор с команда :'<,'>w !sh

person Sergey Voronezhskiy    schedule 20.07.2018
comment
Възможно е това да не е правилният отговор, защото началникът на тема иска копие между vim и shell. Но аз идвам тук от Google, като помолих vim copy content да изпълни shell и открих, че това решение покрива въпроса ми напълно - person Sergey Voronezhskiy; 20.07.2018