首页 > 解决方案 > 使用 GNU Screen 使用 Vim 到 R 执行超出原始屏幕视图的代码

问题描述

我正在使用 GNU Screen 使用以下 .vimrc 配置将代码从 Vim 发送到 R:

map <C-L> "kyy:echo system("screen -S $STY -p R -X stuff ".shellescape(@k))<CR>j

vmap <C-L> "xy:echo system("screen -S $STY -p R -X stuff ".shellescape(@x."\n"))<CR>j

(我使用 cntr-L 将代码从 Vim 发送到标题为“R”的 R 窗口。)

我可以在当前屏幕内运行函数,

exp_val <- function(roll){
vals <- numeric(length(roll))
vals[roll == "G"] <- 1/6
vals[roll == "Y"] <- 1/3
vals[roll == "R"] <- 1/2
sum(vals)
}

prob_choice <- function(roll, ng = 6, ny = 4, nr = 3){
tot <- ng + ny + nr
i <- c(ng,ny,nr)
col <- c("G","Y","R")
p1 <- i[col==roll[1]]/tot
i[col==roll[1]] <- i[col==roll[1]] - 1
p2 <- i[col==roll[2]]/(tot-1)
i[col==roll[2]] <- i[col==roll[2]] - 1
p3 <- i[col==roll[3]]/(tot-2)
p1*p2*p3
}

但是当我尝试向下滚动并突出显示在原始屏幕视图下方延伸的另一个功能时

single_round <- function(sampsp,probs=rep(1/nrow(sampsp),nrow(sampsp))){
r <- sample(1:nrow(sampsp),1,prob = probs)
dice <- sampsp[r,]
roll <- numeric(3)
i <- which(dice=="G"); roll[i] <- sample(c("B","S","F"),1,prob = c(1/2,1/6,1/3))
j <- which(dice=="Y"); roll[j] <- sample(c("B","S","F"),1,prob = c(1/3,1/3,1/3))
k <- which(dice=="R"); roll[k] <- sample(c("B","S","F"),1,prob = c(1/6,1/2,1/3))
num_dice <- c(length(i),length(j),length(k))
outcome <- c(sum(roll=="B"),sum(roll=="S"),sum(roll=="F"))
if (is.null(roll[i])){roll[i] <- 0}
if (is.null(roll[j])){roll[j] <- 0}
if (is.null(roll[k])){roll[k] <- 0}
feet <- c(sum(roll[i]=="F"),sum(roll[j]=="F"),sum(roll[k]=="F")) # to keep track of color of footprints

list(num_dice,outcome,feet)
}

我收到以下错误

X: stuff: one or two arguments required 

我可以在 .vimrc 中更改什么,以便突出显示并执行超出原始屏幕视图的大部分脚本吗?

标签: vim

解决方案


推荐阅读